C ++构造函数名称后面的冒号有什么作用?

冒号运算符(“:”)在此构造函数中做什么?等于MyClass(m_classID = -1, m_userdata = 0);吗?


class MyClass {

public:


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

    }


    int m_classID;

    void *m_userdata;

};


MM们
浏览 1093回答 3
3回答

慕莱坞森

这是一个初始化列表,并且是构造函数的实现的一部分。构造函数的签名是:MyClass();这意味着可以不使用任何参数来调用构造函数。这使其成为默认的构造函数,即在您编写时将默认调用的构造函数MyClass someObject;。该部分  : m_classID(-1), m_userdata(0)称为初始化列表。这是一种使用您选择的值初始化对象的某些字段(如果需要的话,可以初始化所有字段)的方法,而不是将它们保留为未定义状态。执行初始化列表之后,将执行构造函数主体(在您的示例中恰好为空)。在其中可以进行更多分配,但是一旦输入,所有字段均已初始化-可以是随机的,未指定的值,也可以是初始化列表中选择的值。这意味着您在构造函数主体中所做的分配将不是初始化,而是值的更改。

慕丝7291255

它表示初始化程序列表的开始,该列表用于初始化对象的成员变量。关于: MyClass(m_classID = -1, m_userdata = 0);那声明了一个可以接受参数的构造函数(所以我可以创建一个MyClassusing MyClass m = MyClass(3, 4),这将导致m_classID3和m_userdata4)。如果我不向MyClass构造函数传递任何参数,则将导致创建与带有初始化程序列表的版本等效的对象。
打开App,查看更多内容
随时随地看视频慕课网APP