這打印0
,意思是data
是零初始化。爲什麼在base
有用戶聲明的構造函數時會發生這種情況?即使base有用戶聲明的構造函數,爲什麼零初始化會發生?
struct base
{
base() { }
int data;
};
struct derived : base
{
derived() = default;
};
int main()
{
std::cout << derived().data;
}
如果derived
有一個用戶聲明的構造函數,那麼它打印出一個隨機值。爲什麼零初始化依賴於派生類而不是基類?
它不會發生。 UB有許多可能的結果,0只是其中之一。 –
最好完全避免這個問題,並提供一個構造函數初始化列表IMO。 – Conduit
僅供參考,在'default'和'#include' –
Cornstalks