C++のクラスメンバーの初期化でよく忘れるのでメモ
##問題
例えば下記のようなクラスがある場合:
class Sample {
public:
Sample(int a, int b) {
var_a = a;
var_b = b;
}
private:
int var_a;
const int var_b;
};
上記はSampleコンストラクタにて初期化する際にエラーになります。
なぜならvar_b
はconst
で定義されているため、値を変更することはできません。
##じゃあどうするの
メンバ初期化リスト(member initialization list)を使用して値をアサインします。
これを使うことで上記のようにコンストラクタの変数アサインロジックを排除できます。
これが結構文法的に忘れやすいので今回メモっておこうと思いました。
class Sample {
public:
Sample(int a, int b):var_a(a), var_b(b) {}
private:
int var_a;
const int var_b;
};
- 初期化リストはコンストラクタパラメータの後に
:
で定義する - それぞれのメンバ関数は
,
で区切る - 初期化リストは
;
で終了しない
*別にconstメンバがいない場合でも初期化リストは使えます。行数省きたいときは使用推奨?