1. ホーム
  2. c++

[解決済み] C++のコンストラクタ名の後にコロンを付けるとどうなりますか?重複] [重複

2022-12-09 03:56:11

質問

このコンストラクタのコロン演算子(":")は何をするのでしょうか? と等価なのでしょうか? MyClass(m_classID = -1, m_userdata = 0); ?

class MyClass {
public:

    MyClass() : m_classID(-1), m_userdata(0) { 
    }

    int m_classID;
    void *m_userdata;
};

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

これは 初期化リスト であり、コンストラクタの実装の一部です。

コンストラクタのシグネチャは

MyClass();

つまり、コンストラクタはパラメータ無しで呼び出せるということです。これにより、このコンストラクタは デフォルトコンストラクタ を書いたときにデフォルトで呼び出されるようになります。 MyClass someObject; .

部分 : m_classID(-1), m_userdata(0) というのは 初期化リスト . これは、オブジェクトのいくつかのフィールドを未定義のままにするのではなく、選択した値で初期化する方法です(必要であれば、それらすべてを)。

初期化リストを実行した後、コンストラクタ本体(この例ではたまたま空になっています)が実行されます。その内部ではさらに多くの代入を行うことができますが、いったん入力すると、すべてのフィールドはすでに初期化されています。ランダムで指定されていない値、または初期化リストで選択した値のどちらかになります。つまり、コンストラクタ本体で行う代入は、初期化ではなく、値の変更になります。