14
 int main ( )
 {
       int a = 1 ;
       static int b = a ;
 }

这段代码在gcc 4.3.2中给出了错误

错误:初始化元素不是常量。

但它在g++ 4.3.2上运行良好。有人请解释为什么这在 g++ 4.3.2 中没有给出错误。

4

1 回答 1

19

因为它在 C++ 中有效(在 C 中无效)。

(C++11, 6.7p4)“具有静态存储持续时间的块范围实体的常量初始化(3.6.2),如果适用,在其块首次进入之前执行。[...]否则这样的变量是在控件第一次通过其声明时初始化;这样的变量在其初始化完成时被认为已初始化。"

于 2013-01-09T19:10:54.343 回答