为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
MM们 2019-10-15 14:39:14
冒号运算符(“:”)在此构造函数中做什么?等于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)称为初始化列表。这是一种使用您选择的值初始化对象的某些字段(如果需要的话,可以初始化所有字段)的方法,而不是将它们保留为未定义状态。


执行初始化列表之后,将执行构造函数主体(在您的示例中恰好为空)。在其中可以进行更多分配,但是一旦输入,所有字段均已初始化-可以是随机的,未指定的值,也可以是初始化列表中选择的值。这意味着您在构造函数主体中所做的分配将不是初始化,而是值的更改。


查看完整回答
反对 回复 2019-10-15
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

它表示初始化程序列表的开始,该列表用于初始化对象的成员变量。


关于: MyClass(m_classID = -1, m_userdata = 0);


那声明了一个可以接受参数的构造函数(所以我可以创建一个MyClassusing MyClass m = MyClass(3, 4),这将导致m_classID3和m_userdata4)。如果我不向MyClass构造函数传递任何参数,则将导致创建与带有初始化程序列表的版本等效的对象。


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 1083 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信