根据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{ }
) 之前将专门提供继承构造函数的类类型初始化为零?