我有简单的样本:
#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;
)中的所有整数都未初始化。
它出了什么问题?或者我没有看到一些obvios?
答案 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