【问题标题】:Why Declaration of static variable with non-constant does not give Error in g++为什么用非常量声明静态变量不会在g ++中给出错误
【发布时间】:2013-01-09 19:10:05
【问题描述】:
 int main ( )
 {
       int a = 1 ;
       static int b = a ;
 }

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

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

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

【问题讨论】:

  • 你发的两个版本是一样的
  • @Zaffy 一个是 C 编译器,另一个是 C++ 编译器。
  • C 和 C++ 是不同的语言。不同的行为、标准等:D
  • 这里也是 +1。好问题。

标签: c++ c


【解决方案1】:

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

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

【讨论】:

  • 这是否意味着statics 可以在运行时在 C++ 中初始化,还是我没有正确理解规范?
  • @user1294203:就是这个意思。而且由于非常量初始化可能会产生副作用(对于类类型),因此实现必须在正确的时间,在运行时确实做到这一点。
猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 2016-10-18
  • 2018-05-15
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多