This question already has answers here:
What is this weird colon-member (“ : ”) syntax in the constructor?
(12个答案)
6年前关闭。
冒号运算符(“:”)在此构造函数中做什么?它等于
这意味着可以不使用任何参数来调用构造函数。这使其成为默认的构造函数,即在编写
执行初始化列表后,将执行构造函数主体(在您的示例中碰巧为空)。在其中可以进行更多分配,但是一旦输入,所有字段均已初始化-可以是随机的,未指定的值,也可以是初始化列表中选择的值。这意味着您在构造函数主体中所做的分配将不是初始化,而是值的更改。
(12个答案)
6年前关闭。
冒号运算符(“:”)在此构造函数中做什么?它等于
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)
部分称为初始化列表。这是一种使用您选择的值初始化对象的某些字段(如果需要的话,可以初始化所有字段)的方法,而不是将它们保留为未定义状态。执行初始化列表后,将执行构造函数主体(在您的示例中碰巧为空)。在其中可以进行更多分配,但是一旦输入,所有字段均已初始化-可以是随机的,未指定的值,也可以是初始化列表中选择的值。这意味着您在构造函数主体中所做的分配将不是初始化,而是值的更改。
关于c++ - C++构造函数名称后面的冒号有什么作用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1272680/