簡體   English   中英

非靜態數據成員初始化

[英]Non-static data member initialization

根據C ++標准,以下三種結構定義之間是否存在差異?

struct Foo
{
    int a;
};

struct Foo
{
    int a{};
};

struct Foo
{
    int a{0};
};

最后兩個是C ++ 11。

給定第一個定義,如果您創建具有自動存儲持續時間的Foo實例,則a將是未初始化的。 您可以執行聚合初始化以初始化它。

Foo f{0};  // a is initialized to 0

Foo的第二個和第三個定義都將數據成員a初始化為0

在C ++ 11中,2和3都不是聚合 ,但C ++ 14 更改了該規則,因此盡管添加了括號或等於初始值 ,它們仍然保持聚合。

struct Foo
{
    int a;
}bar;

如果不在全局范圍內或非靜態范圍內,bar.a未初始化。

struct Foo
{
    int a{};
}bar;

bar.a初始化為0

struct Foo
{
    int a{0};
}bar;

bar.a初始化為0

因此構造2和3是相同的。 1是不同的。

有關更多詳細信息,您可能需要閱讀初始化類成員初始化

第一個是POD類型。 成員a初始化為0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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