簡體   English   中英

如何在C ++ 11中正確初始化數據成員?

[英]How to properly initialize the data members in C++11?

在C ++ 11中,我們有兩種方法可以初始化類/結構的數據成員,如以下示例所示:

struct A
{
    int n = 7;
};

struct B
{
    int n;

    B() : n(7) {}
};

問題1:

哪種方法更好?

問題2:

從現代C ++樣式檢查器的角度來看,是否不鼓勵采用傳統方式(后者)?

您實際上可以混合兩種樣式。 如果您有多個構造函數,這很有用,但是變量僅由一個或幾個構造函數專門初始化。

struct A
{
    int n = 7;

    A() {}  // n will be initialized to 7
    A(int n_): n{n_} {}  // Initialize n to something else
};

我不確定,但是我認為第一種情況僅適用於C ++基本類型。 在大多數書中,尤其是Scott Meyers的《 55種改進C ++代碼的方法》一書中,建議采用第一方法,所以我會堅持這樣做。 :-)

不要忘記,評估和初始化的順序決定了類中成員的排序方式。

我只喜歡第二種初始化樣式。

兩種方法都沒有更好的選擇,但是,新的統一初始化具有與其他語言相似且更易於理解的優點。 統一初始化不僅適用於結構成員,而且適用於初始化程序列表和構造函數參數的全面初始化。

暫無
暫無

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

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