根據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{ }
)之前是否應該只提供繼承構造函數的類類型進行初始化?
+1,賓果。粗體通道是關鍵。 – Jon
我認爲將最後一段移到答案的開頭會更清楚。 – Casey