3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C++ クラスメンバの初期化(const変数がメンバに存在する場合)

Last updated at Posted at 2019-11-25

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_bconstで定義されているため、値を変更することはできません。

##じゃあどうするの
メンバ初期化リスト(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;
};
  1. 初期化リストはコンストラクタパラメータの後に:で定義する
  2. それぞれのメンバ関数は,で区切る
  3. 初期化リストは;で終了しない

*別にconstメンバがいない場合でも初期化リストは使えます。行数省きたいときは使用推奨?

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?