3

g ++で次をコンパイルしようとすると:

const int zero;

int main()
{
  return 0;
}

に関するエラーが表示されますuninitialized const 'zero'。グローバル変数はデフォルトで 0 [1] に初期化されていると思いましたか? なぜこれがここに当てはまらないのですか?
VSはこれをうまくコンパイルします。

[1] たとえば、https://stackoverflow.com/a/10927293/331785を参照してください。

4

2 に答える 2

6

私のgccはもう少し冗長です:

$ g++ zeroconst.c
zeroconst.c:1:11: error: uninitialized const ‘zero’ [-fpermissive]

-fpermissiveオプションにより、これをコンパイルできることがわかります。

C++ 標準への参照については、初期化されていない constに関するこの質問を参照してください(問題は C++ 固有です)。

GCC wikiで引用されているように:

C++ 標準 (8.5 [decl.init]、C++03 では第 9 項、C++0x では第 6 項) で義務付けられているように、G++ では const 修飾型のオブジェクトをデフォルトで初期化することはできません。ユーザー宣言のデフォルト コンストラクタ。コンパイルに失敗したコードは、初期化子を提供することで修正できます...

于 2013-01-28T18:41:01.130 に答える
0

G ++では、定義中に定数を初期化する必要があります。

于 2013-01-28T18:52:56.593 に答える