0

私はC++を学んでいます。不思議なことに、クラス宣言内から静的変数と定数変数にのみ値を割り当てることができますか?これが主に、通常のメンバーに値を割り当てるときに、特別な方法がある理由です。

void myClass::Init() : member1(0), member2(1)
{
}
4

2 に答える 2

5

これはコンストラクターであると想定されているように見えます。そうである場合、それは戻り型を持たないはずであり、クラスと同じ名前を持つ必要があります。

myClass::myClass()
    : member1(0), member2(1)
{

}

初期化子リストを持つことができるのはコンストラクターだけです。Initそのタイプの初期化を関数に委任することはできません。

非静的メンバーは、コンストラクター初期化子リストで初期化できます。すべてのconstおよびreferenceメンバーは、コンストラクター初期化子リストで初期化する必要があります。

すべてが等しい場合は、通常、コンストラクターの本体ではなく、コンストラクター初期化子リストのすべてのメンバーを初期化することをお勧めします(初期化子リストを使用できない場合や、初期化子リストを使用するのが不器用な場合があります。その場合は、明らかにそれを使用します)。

于 2010-04-27T01:58:51.740 に答える
0

静的クラスのメンバーは、特定のオブジェクトに属していません。静的メンバーは、そのクラスのすべてのオブジェクト間で共有されます。したがって、コンストラクターでそれらを初期化しないでください。たとえば、再初期化する頻度が非常に高くなります。

ここで、静的constクラスメンバーのみがクラス自体で初期化できるのはなぜかという疑問があります。その理由は、クラスがヘッダーに含まれている可能性が高く、そのヘッダーが複数の変換単位に含まれているためです。これにより、コンパイラに問題が発生します。どの変換ユニット(つまり、どのオブジェクトファイル)に実際の初期化を配置する必要がありますか?しかし、単純な定数の場合、それは問題ではありません。int const TWO = 2;変換ユニットで実際に初期化する必要はありません。コンパイラはそれを記憶しているだけです。

于 2010-04-27T09:42:13.137 に答える