Gcc 为什么赢了';是否编译未初始化的全局常量?
当我尝试用g++编译以下代码时:Gcc 为什么赢了';是否编译未初始化的全局常量?,gcc,g++,global-variables,Gcc,G++,Global Variables,当我尝试用g++编译以下代码时: const int zero; int main() { return 0; } 我得到一个关于未初始化常量'zero'的错误。我认为全局变量默认初始化为0[1]?为什么这里不是这样? VS编译这篇文章 [1] 例如,请参见我的gcc稍微详细一些: $ g++ zeroconst.c zeroconst.c:1:11: error: uninitialized const ‘zero’ [-fpermissive] 我们看到,-fppermissive
const int zero;
int main()
{
return 0;
}
我得到一个关于未初始化常量'zero'
的错误。我认为全局变量默认初始化为0[1]?为什么这里不是这样?VS编译这篇文章
[1] 例如,请参见我的gcc稍微详细一些:
$ g++ zeroconst.c
zeroconst.c:1:11: error: uninitialized const ‘zero’ [-fpermissive]
我们看到,-fppermissive
选项将允许编译此文件
参见参考C++标准(问题是C++特定)。 引用于:
<>按C++标准(8.5)[C.I.IIT ],C++ 9中的PARA 9 C++0x)中的第6段),G++不允许常量限定类型的对象 初始化为默认值,除非该类型具有用户声明的默认值 构造器。无法编译的代码可以通过提供 初始化器G++要求在定义期间初始化常量 是的,但这并不能解释为什么在默认配置下它甚至是一个错误。这似乎完全合法,因为全局变量已初始化@baruch添加了一个问题的链接,答案引用了
C++
标准(从C开始,它是有效的,并且可以编译),我刚刚意识到gcc
确实可以编译它。这是g++
没有的。为什么呢?关于全局变量的规则是否被初始化为0而不是C++标准的一部分?比C++中的随机事物编译和其他随机的事情都没有。我认为,即使是对该标准的引用,也不能说明为什么它应该被禁止。