[英]Why does zero-initialization happen even when base has a user-declared constructor?
這打印0
,表示data
為零初始化。 為什么即使base
具有用戶聲明的構造函數也會發生這種情況?
struct base
{
base() { }
int data;
};
struct derived : base
{
derived() = default;
};
int main()
{
std::cout << derived().data;
}
如果derived
具有用戶聲明的構造函數,則它會打印出一個隨機值。 為什么零初始化取決於派生類而不是基類?
這些規則是專門為覆蓋而編寫的
struct S {
int i;
std::string s;
};
在沒有任何用戶提供的構造函數的情況下,即使隱式生成的默認構造函數是非平凡的, S().i
將被初始化為零。 這不能依賴於int
的構造函數,因為int
沒有任何構造函數。 決定是否依賴於類S
是否具有用戶提供的構造函數。 它沒有太多可以依賴的東西。
你所看到的只是一個簡單的結果。 derived
類也沒有用戶提供的構造函數,因此初始化也為零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.