为什么gcc不能编译未初始化的全局const?

时间:2013-01-28 18:38:15

标签: gcc g++ global-variables

当我尝试用g ++编译以下代码时:

const int zero;

int main()
{
  return 0;
}

我收到有关uninitialized const 'zero'的错误消息。我认为全局变量默认初始化为0 [1]?为什么不是这种情况呢?
VS编译这个罚款。

[1]例如,请参阅https://stackoverflow.com/a/10927293/331785

2 个答案:

答案 0 :(得分:6)

我的gcc稍微冗长一点:

$ g++ zeroconst.c
zeroconst.c:1:11: error: uninitialized const ‘zero’ [-fpermissive]

我们看到-fpermissive选项允许编译它。

uninitialized const上查看此问题以获取对C ++标准的引用(问题是C ++特定的)。

GCC wiki所述:

  

根据C ++标准的规定(8.5 [decl.init],C ++ 03中的第9段,   C ++ 0x)中的第6段,G ++不允许使用const限定类型的对象   默认初始化,除非该类型具有用户声明的默认值   构造函数。无法编译的代码可以通过提供一个来修复   初始化...

答案 1 :(得分:0)

G ++要求您在定义期间初始化常量。