只是偶然发现了这个问题,谁能解释一下这里发生了什么?为什么这个成员变量没有正确初始化?
struct Foo {
int i;
~Foo() {
std::cout << i << std::endl;
}
};
void bar()
{
Foo f;
f.i = 1;
f = Foo();
f.i = 2;
}
我得到以下输出:
-85899... (gibberish = "default" value for uninitialized int)
2
,我预计
1
2
为什么是它f.i = 1;
似乎这里有没有影响?
因为f的析构函数,当你一个新的Foo值分配给它不会被调用。第一个输出可能来自f = Foo()中临时的析构函数。 – 2013-05-10 12:46:06
@mfontanini没有未定义的行为。未初始化时'i'的值是不确定的。行为是定义的,但不是确定的。完全不同的两件事。 – pmr 2013-05-10 12:48:55
你使用的是古老的编译器吗?自2003年以来(甚至可能是1998年),'Foo()'应该初始化临时值,并将'i'设置为'0'。 – 2013-05-10 13:20:03