冒号运算符(“:”)在此构造函数中做什么?等于MyClass(m_classID = -1, m_userdata = 0);吗?class MyClass {public: MyClass() : m_classID(-1), m_userdata(0) { } int m_classID; void *m_userdata;};
3 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
这是一个初始化列表,并且是构造函数的实现的一部分。
构造函数的签名是:
MyClass();
这意味着可以不使用任何参数来调用构造函数。这使其成为默认的构造函数,即在您编写时将默认调用的构造函数MyClass someObject;。
该部分 : m_classID(-1), m_userdata(0)称为初始化列表。这是一种使用您选择的值初始化对象的某些字段(如果需要的话,可以初始化所有字段)的方法,而不是将它们保留为未定义状态。
执行初始化列表之后,将执行构造函数主体(在您的示例中恰好为空)。在其中可以进行更多分配,但是一旦输入,所有字段均已初始化-可以是随机的,未指定的值,也可以是初始化列表中选择的值。这意味着您在构造函数主体中所做的分配将不是初始化,而是值的更改。
慕丝7291255
TA贡献1859条经验 获得超6个赞
它表示初始化程序列表的开始,该列表用于初始化对象的成员变量。
关于: MyClass(m_classID = -1, m_userdata = 0);
那声明了一个可以接受参数的构造函数(所以我可以创建一个MyClassusing MyClass m = MyClass(3, 4),这将导致m_classID3和m_userdata4)。如果我不向MyClass构造函数传递任何参数,则将导致创建与带有初始化程序列表的版本等效的对象。
- 3 回答
- 0 关注
- 1137 浏览
添加回答
举报
0/150
提交
取消