考虑以下代码:
class A {
public:
int i;
A() {}
};
class B {
public:
A a;
int i;
};
int main() {
B* p = new B {};
std::cout << p->i << " " << p->a.i << "\n";
}
使用clang++编译时,p->i
的值为零,但p->a.i
不是零。只要该类没有用户提供的构造函数,整个对象不应该被清零吗?根据标准中的第二条规定,这里适用于每个子弹。
A
确实有一个用户定义的构造函数。 - icabodA::i
没有任何影响。 - juanchopanzaB
没有 零初始化。它是 值初始化。 - juanchopanzaA
的值初始化并不会导致其数据成员被零初始化。 - juanchopanza