簡體   English   中英

為什么即使base具有用戶聲明的構造函數,也會發生零初始化?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM