ええと..なぜそれができるべきではないのですか?メンバー変数は、定義されている場所に関係なく、クラス全体で表示されます。
class Foo{
public:
Foo(int i) : _i(i) {}
private:
int _i;
};
コロンの後に初期化がどのように機能するかを意味する場合:
、標準の表現が必要な場合は、「初期化リスト」/「ctor初期化子」を検索してください。
編集:このクラスを検討してください:
class Foo{
public:
Foo(int i, float f) : _i(i), _f(f) {}
private:
int _i;
float _f;
};
そして今、この関数と他のクラスを考えてみましょう:
int random(){
return 4;
}
class Bar{
public:
Bar() : _f(random(), 3.14159f) {}
private:
const Foo _f;
};
メンバーに適切なコンストラクターがあると仮定して、初期化子リストのメンバーを必要に応じて初期化できます。これで、const
メンバーの場合、ctor本体内ではそれ以上割り当てることができないため、その方法でのみ初期化できます。これは、非定数変数と非参照変数でのみ実行できます。
class Bar{
public:
Bar(){
_f = Foo(random(), 3.14159f); // invoke copy assignment operator
}
private:
Foo _f; // non-const
};
これが役に立たないのなら、あなたは本当にあなたが理解していないことを表現していないと思います。