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

rfo*_*itz 14 c c++

 int main ( )
 {
       int a = 1 ;
       static int b = a ;
 }
Run Code Online (Sandbox Code Playgroud)

这段代码给出错误的gcc 4.3.2

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

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

oua*_*uah 19

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

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

  • @ user1294203:就是这个意思.而且由于非常量初始化可能会产生副作用(对于类类型),因此实现实际上必须在运行时在正确的时间执行此操作. (2认同)