- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我注意到一个非常奇怪的行为,如果是标准的,我会很乐意利用它(我想用它做的事情解释起来相当复杂并且与问题无关)。
行为是:
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. */
}
奇怪的是,逆运算会产生编译时错误:
void name();
static void name() {
/* Illegal */
}
那么,这是标准吗?我可以期望其他编译器以同样的方式运行吗?谢谢!
最佳答案
C++ 标准:
7.1.1/6: "A name declared in a namespace scope without a storage-class-specifier has external linkage unless it has internal linkage because of a previous declaration" [or unless it's const].
在您的第一种情况下,name
是在命名空间范围(特别是全局命名空间)中声明的。因此,第一个声明改变了第二个声明的链接。
禁止反转是因为:
7.1.1/7: "The linkages implied by successive declarations for a given entity shall agree".
因此,在您的第二个示例中,第一个声明具有外部链接(按 7.1.1/6),第二个声明具有内部链接(明确),并且这些不一致。
您还询问了 C,我想这是同一类事情。但是我这里有 C++ 的书,而你可以像我一样在线查看 C 标准草案 ;-)
关于c++ - 声明函数静态和后来的非静态 : is it standard?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1943847/
我有一个存储库,其中包含我通过在本地主机上运行服务器进行测试的代码。标准程序是启动 Apache-Tomcat-7,使用 Maven 重新构建项目并进行部署。 经过一段时间的编码,我决定 git st
我是一名优秀的程序员,十分优秀!