2

こちらのドキュメントをご覧ください http://www.open-std.org/Jtc1/sc22/wg21/docs/papers/2011/n3242.pdf

「静的保存期間 (3.7.1) またはスレッド保存期間 (3.7.2) を持つ変数は、他の初期化が行われる前にゼロで初期化 (8.5) される」</p>

クラス宣言と main() などのすべてが 1 つのファイルにある場合 (必須)、初期化を省略できるはずです。ただし、省略すると、ビルド中に「未定義の参照」エラーが発生します。

#include <iostream>
using namespace std;

class foo
{
    public:
        static int array[2];
};

int foo::array[2] = {0}; //I should be able to omit this line

int main()
{
    cout << "foo::array[0] = " << foo::array[0] << endl;
    return 0;
}

PS: C++11 はありません

4

2 に答える 2

8

基準を読み違えていると思います。= {0}コンパイラが自動的にゼロで初期化するため、パーツをドロップするだけです。

行全体を省略することはできません。それ以外の場合は、配列を宣言するだけで、どこにも定義しないためです。それが問題の原因です。

于 2013-09-28T17:35:45.993 に答える