1

クラス定義で静的定数メンバーを初期化することは可能ですか?コードについては、以下を参照してください。

class foo
{
  public:
    foo(int p) : m_p(p){}
    ~foo(){}

  private:
    int m_p;
};


class bar
{
   public:
     bar(){}
     ~bar(){}

   public:
     static const foo m_foo = foo( 2 ); //is this possible?
};

どうもありがとう。

4

2 に答える 2

4

簡潔な答え:

いいえ、静的メンバーが const であり、整数型または列挙型になるまで。

長い答え:

$9.4.2/4 - 「静的データ メンバーが const 整数型または const 列挙型の場合、クラス定義でのその宣言は、整数定数式 (5.19) である定数初期化子を指定できます。その場合、メンバーは整数定数式で使用できます。メンバーがプログラムで使用され、名前空間スコープ定義に初期化子が含まれていない場合、メンバーは名前空間スコープで定義されます。」

于 2010-11-03T03:27:22.767 に答える
3

あなたの例のように、クラス型の静的データメンバーではありません。

9.4.2/2:

クラス定義内の静的データ メンバーの宣言は定義ではありません ... 静的データ メンバーの定義は、メンバーのクラス定義を囲む名前空間スコープに表示されます。

9.4.2/4:

静的データ メンバーが const 整数型または const 列挙型の場合、クラス定義でのその宣言は、整数定数式 (5.19) である定数初期化子を指定できます。その場合、メンバーは整数定数式に表示できます。メンバーがプログラムで使用され、名前空間スコープ定義に初期化子が含まれていない場合、メンバーは名前空間スコープで定義されます。

于 2010-11-03T03:29:52.910 に答える