当我尝试用g++编译以下内容时:
const int zero;
int main()
{
return 0;
}
我收到有关uninitialized const 'zero'
的错误。我以为全局变量默认初始化为 0 [1] ?为什么这里不是这样?
VS 编译这个很好。
[1] 例如,请参阅 https://stackoverflow.com/a/10927293/331785
我的 gcc 稍微啰嗦一些:
$ g++ zeroconst.c
zeroconst.c:1:11: error: uninitialized const ‘zero’ [-fpermissive]
我们看到-fpermissive
选项将允许编译它。
请参阅未初始化的 const 上的此问题,以获取C++标准的参考(该问题特定于C++)。
正如GCC维基所引用的:
根据C++标准(8.5 [decl.init],C++03第9段, C++0x) 中的第 6 段,G++ 不允许常量限定类型的对象 默认初始化,除非类型具有用户声明的默认值 构造 函数。编译失败的代码可以通过提供 初始 化。。。
G++ 要求您在定义期间初始化常量。