小编典典

如果我不明确地初始化,C++ 类成员如何初始化?

all

假设我有一个包含私人成员ptrnamepnamernamecrname的课程age。如果我不自己初始化它们会怎样?这是一个例子:

class Example {
    private:
        int *ptr;
        string name;
        string *pname;
        string &rname;
        const string &crname;
        int age;

    public:
        Example() {}
};

然后我做:

int main() {
    Example ex;
}

ex中的成员是如何初始化的?指针会发生什么?使用默认构造函数进行0初始化string和? 参考成员呢?还有 const
引用呢?int``string()``int()

我想学习它,以便我可以编写更好(无错误)的程序。任何反馈都会有所帮助!


阅读 102

收藏
2022-07-27

共1个答案

小编典典

代替显式初始化,类中成员的初始化与函数中局部变量的初始化相同。

对于 objects
,它们的默认构造函数被调用。例如,对于std::string,默认构造函数将其设置为空字符串。如果对象的类没有默认构造函数,如果你没有显式地初始化它,就会出现编译错误。

对于 原始类型 (指针、整数等),它们 没有 被初始化——它们包含之前碰巧在该内存位置的任意垃圾。

对于 引用 (例如std::string&),不初始化它们是 非法 的,您的编译器会抱怨并拒绝编译此类代码。必须始终初始化引用。

因此,在您的特定情况下,如果它们没有显式初始化:

    int *ptr;  // Contains junk
    string name;  // Empty string
    string *pname;  // Contains junk
    string &rname;  // Compile error
    const string &crname;  // Compile error
    int age;  // Contains junk
2022-07-27