4

コンストラクターを使用せずに、クラス内のメンバー変数 (静的 const 以外) を直接初期化できないことを知っています。

しかし、この背後にある理由が何であるかを知りたかっただけです。以下はコードスニペットです

誰かが助けてくれるなら

class a 
{

    int c=5;

// giving error error C2864: 'a::c' : only static const integral data members can be 

// initialized within a class

    int b;


public:
    a():c(1),b(2){}

    void h()
    {
        printf("%d,%d",c,b);
    }
};

int main()
{

    a l;

    l.h();

    getchar();
}
4

2 に答える 2

5

実際にできます。ただし、C++11 のみです。

以下は、有効な C++11 コードです。

class A
{
    int x = 100; //valid in c++11
};

お使いのコンパイラはこれをサポートしていない可能性がありますが、GCC 4.8.0 では正常にコンパイルされます

それが役立つことを願っています。

于 2013-04-01T18:41:15.683 に答える
1

クラス定義は主に、クラスが持つインターフェイスと占有するメモリの量、およびコンパイル時に既にわかっているクラスに関連付けられた値 (つまり、定数) を他のクラスに伝えることを目的としています。クラス定義に直接実行可能なコードはありません (ただし、クラスの定義内で定義された関数に実行可能なコードがある可能性があります)。実行されるコードは、関数自体の定義にあります。

編集: どうやらこれは C++11 でサポートされています。

于 2013-04-01T18:40:50.810 に答える