【发布时间】:2013-12-13 20:16:30
【问题描述】:
根据cppreference 没有任何用户提供的构造函数的非联合类类型将在构造之前进行零初始化:
如果 T 是没有任何用户提供的构造函数的非联合类类型,则对象被零初始化,然后调用隐式声明的默认构造函数(除非它是微不足道的)
我不确定当使用 c++11 继承的构造函数时会发生什么,因为引用明确提到了隐式声明的默认构造函数。
举个例子:
#include <iostream>
struct A {
int a;
A() {}
A(int i): a(i) {}
};
struct B: public A {
using A::A;
};
int main() {
B b { 5 };
B* p = new (&b) B{ };
std::cout << b.a << std::endl;
}
什么是正确的输出,0 还是 5?专门提供继承构造函数的类类型是否应该在值初始化之前进行零初始化 (B{ })?
【问题讨论】:
标签: c++ c++11 value-initialization