【发布时间】:2011-05-09 20:48:48
【问题描述】:
假设我有这门课:
class X {
public:
int x;
};
我看到如果我在本地创建一个 X 的实例,x 不会被初始化为 0,只有当我全局创建它时。
这是否意味着编译器不会为本地创建的对象合成默认构造函数(我对此表示怀疑),或者它将被合成但不会将 x 值归零,如果是这种情况,为什么会这样?
【问题讨论】:
-
int从来没有默认构造函数,它是一个原语。有时它对您来说是 0 的事实是侥幸,而不是任何标准所要求的。总是总是初始化你的变量。 -
@Chris:这不是侥幸。具有静态存储持续时间的对象(包括大多数全局变量)在任何其他初始化发生之前被初始化为零。这意味着全局 int 值从 0 开始。
-
您没有得到有用或正确答案的原因是因为实际答案需要好几页一本好的 C++ 教科书——您正在阅读哪一本?
-
答案部分取决于您如何“在本地创建 X 的实例”。你说
X x;、X x = X();、X*p = new X;还是X *p = new X();? -
@Dennis Zickefoose:很有趣。现在我知道了,并且知道 > 0.5 * 战斗。
标签: c++