4

クラスの非静的メンバーがクラス定義で初期化されたという質問を見ました。しかし、次のコードをコンパイルしようとすると、コンパイラからエラーが発生します。

class MyClass
{
    int n = 2;
};

私が得ているエラーは次のとおりです。

g++ -o ns nonstatic.cpp -Wall -Wextra -pedantic
nonstatic.cpp:3:13: error: ISO C++ forbids initialization of member ‘n’ [-fpermissive]
nonstatic.cpp:3:13: error: making ‘n’ static [-fpermissive]
nonstatic.cpp:3:13: error: ISO C++ forbids in-class initialization of non-const static member ‘n’

私は常に、次のようにコンストラクターでそのようなメンバーを初期化する必要があると考えていました。

class MyClass
{
    public:
        MyClass ( void ) : n(2) {}
    private:
        int n;
};

またはn、コンストラクターの本体内で初期化されます。だから私の質問は: クラスコンストラクターのコンテキスト外で非静的メンバーを初期化できるのはいつですか?

敬具、

4

1 に答える 1

8

C ++でクラスの非静的メンバーを初期化できるのはいつですか?

これは、C++11 で既に実行できます。

コマンドラインに渡すだけで-std=c++11、できるようになります。

于 2013-06-27T19:11:04.043 に答える