为什么使用非常量声明静态变量不会在g ++中给出错误

时间:2013-01-09 19:10:05

标签: c++ c

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

这段代码将 gcc 4.3.2 中的错误视为

  

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

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

1 个答案:

答案 0 :(得分:19)

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

  

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