4

我有简单的样本:

#include <iostream>

class parent {
public:
    int i;
};

class child : public parent {
public:
    int d;
};

int main() {
    child c;
    std::cout << c.d << std::endl;
    return 0;
}

如果没有通过调用构造函数显式初始化具有构造函数的基类或成员,编译器会自动使用默认构造函数初始化基类或成员。

但是 c (int d;int i;) 中的所有整数都没有初始化。

在此处输入图像描述

它有什么问题?或者我没有看到明显的东西?

4

3 回答 3

4

使用内置类型,您实际上必须自己进行初始化:

class parent
{
 public:
  parent() : i() {}
  int i;
};

这将初始化i0.

于 2013-01-23T22:23:08.993 回答
4

内置数据类型(如int)并未真正初始化。他们的“默认构造函数”什么都不做,也没有默认值。因此,他们只会得到垃圾值。如果您希望它们具有特定值,则必须显式初始化内置数据类型。

于 2013-01-23T22:23:13.230 回答
3

在没有构造函数和基本类型的类上完成的默认初始化和零初始化之间存在差异:

child c1;           // Default initialized. int types are not initialized.
child c2 = child(); // Zero initialized.    int types are in initialized to zero.
// In C++ 11
child c3 {};        // Use new syntax for zero initialization

更详细的解释:
这里:https
://stackoverflow.com/a/7546745/14065 这里:https ://stackoverflow.com/a/8280207/14065

于 2013-01-23T22:27:24.240 回答