C ++のクラスでの通常の変数、const、static、static const(const static)メンバー変数の宣言と初期化



Declaration Initialization Regular Variables



C ++クラスには、通常の型、定数(const)、静的(static)、および静的定数(static const)のいくつかのタイプのデータメンバーがあります。 C ++ 11の前後でそれらを初期化する次の方法があります。

クラス内初期化がC ++ 11に追加され、通常のデータメンバー変数をクラス、コンストラクター、および初期化リストで初期化できます。 const型のメンバー変数は初期化リストにのみ含めることができ、ここで初期化する必要があります。静的型は、クラスの外部でのみ初期化できます。静的const型は、整数を除いてクラス内で初期化でき、その他はクラス外でのみ初期化できます。コードは次のように表示されます。



class A { public: A() ~A() int m_n1 = 10 int m_n2 int m_n3 double m_d1 = 10.0 const int m_nConst_1 = 10 const int m_nConst_2 const int m_nConst_3 const int m_nConst_4 // static int m_nStatic_1 = 10 // A static data member with an in-class initialization expression must have an immutable constant shaping type or must be specified as 'inline' static int m_nStatic_2 static int m_nStatic_3 // static double m_dStatic_1 = 10.1// A static data member with an in-class initialization expression must have an immutable constant shaping type or must be specified as 'inline' static double m_dStatic_2 static double m_dStatic_3 static const int m_nStaticConst_1 = 10 static const int m_nStaticConst_2 static const int m_nStaticConst_3 //static const double m_dStaticConst_1 = 10 // E1591 members of type 'const double' cannot contain in-class initializers static const double m_dStaticConst_2 static const double m_dStaticConst_3 }

ソースファイルのコードは次のとおりです。

int A::m_nStatic_3 = 13 // int A::m_nConst_4 = 13 non-static data members cannot be defined outside their class const double A::m_dStaticConst_2 = 12.0 A::A():m_n3(12),m_nConst_2(11),m_nConst_3(12),m_nConst_4(13)//, m_nStaticConst_3(12)// m_nStatic_3(13)// is not a non-static data member or base class of class 'A' { m_n2 = 11 // m_nConst_3 = 12 // The expression must be a modifiable lvalue // m_nStatic_2 = 12 // Unable to parse external symbols // m_dStatic_2 = 11.0 // Unable to parse external symbols // m_nStaticConst_2 = 11 // The expression must be a modifiable lvalue // m_dStaticConst_2 = 11.0 // The expression must be a modifiable lvalue } A::~A() { }
タイプ 正常 const 静的 静的定数
宣言時に初期化 バツ バツ x(静的定数整数のみが使用可能)
初期化リストの初期化 バツ バツ
コンストラクターでの初期化 バツ バツ バツ
クラス外の初期化 バツ バツ

総括する:

  1. C ++ 11は、宣言時に初期化される通常のデータメンバーに快適な方法を追加するだけです。
  2. Constは、初期化テーブルでのみ初期化できます
  3. 静的はクラス外でのみ初期化できます
  4. 静的constは、intの場合は宣言時に初期化できます。それ以外の場合は、クラスの外部で初期化する必要があります。

元のリンク: C ++のクラスでの通常の変数、const、static、static const(const static)メンバー変数の宣言と初期化