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 に答える