c ++默认构造函数无法初始化公共变量?

时间:2013-01-23 22:20:40

标签: c++ visual-studio-2010

我有简单的样本:

#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;
}

If you do not explicitly initialize a base class or member that has constructors by calling a constructor, the compiler automatically initializes the base class or member with a default constructor.

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

enter image description here

它出了什么问题?或者我没有看到一些obvios?

3 个答案:

答案 0 :(得分:4)

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

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

这会将i初始化为0

答案 1 :(得分:4)

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

答案 2 :(得分: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