我注意到一个非常奇怪的行为,如果标准的话,我会非常乐意利用(我想用它来解释它并且与问题无关).
行为是:
static void name();
void name() {
/* This function is now static, even if in the declaration
* there is no static keyword. Tested on GCC and VS. */
}
Run Code Online (Sandbox Code Playgroud)
令人好奇的是,逆产生编译时错误:
void name();
static void name() {
/* Illegal */
}
Run Code Online (Sandbox Code Playgroud)
那么,这个标准是否可以让我期望其他编译器的行为方式相同?谢谢!
Ste*_*sop 12
C++标准:
7.1.1/6:"在没有存储类说明符的命名空间范围内声明的名称具有外部链接,除非由于先前的声明"[或除非它是const]而具有内部链接.
在第一种情况下,name在命名空间范围(特别是全局命名空间)中声明.因此,第一份声明改变了第二份声明的联系.
禁止反转因为:
7.1.1/7:"对特定实体的连续声明所暗示的联系应予以同意".
因此,在您的第二个示例中,第一个声明具有外部链接(通过7.1.1/6),第二个声明具有内部链接(显式),并且这些声明不一致.
你也问过C,我想它也是同样的事情.但我在这里有C++书籍,而你就像我一样能够在线查看C标准草稿;-)
| 归档时间: |
|
| 查看次数: |
258 次 |
| 最近记录: |