This question already has answers here:
What is this weird colon-member (“ : ”) syntax in the constructor?

(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/

10-11 22:37
查看更多