1. ホーム
  2. c++

[解決済み] コンストラクタのコロンメンバー(" : ")の変な構文は何ですか?

2022-03-23 21:26:36

質問

最近、次のような例を見かけました。

#include <iostream>

class Foo {
public:
  int bar;
  Foo(int num): bar(num) {};
};

int main(void) {
  std::cout << Foo(42).bar << std::endl;
  return 0;
}

この不思議な : bar(num) とはどういう意味でしょうか?なんとなくメンバ変数を初期化するようですが、この構文は見たことがありません。関数やコンストラクタの呼び出しのように見えますが、この構文では int ? 私には意味不明です。おそらく、誰かが私を啓発することができます。ところで、普通のC++の本には載っていないような、このような難解な言語機能は他にもあるのでしょうか?

どのように解決するのですか?

それは メンバー初期化リスト . これに関する情報は、どの C++の良書 .

ほとんどの場合、メンバー初期化リストですべてのメンバーオブジェクトを初期化する必要があります。 (ただし、FAQの末尾に記載されている例外に注意してください)。

FAQのエントリから得られるポイントは、以下の通りです。

他の条件が同じであれば、代入よりも初期化リストを使った方がコードの実行速度が速くなります。