簡體   English   中英

在 C++ 構造函數初始值設定項列表中使用括號或花括號

[英]Use of parenthesis or curly braces in C++ constructor initializer list

我有一個關於構造函數初始化列表的問題如下:在指定成員的初始值時,根據 C++ Primer book(作者 - Stanley Lippman)將初始值寫入 ()- 括號中。 但是,我也看到 {} 用於指定初始值(請參閱鏈接 - https://en.cppreference.com/w/cpp/language/constructor )有人可以解釋何時使用 () - 括號和何時使用 {} - 花括號謝謝和問候,-sunil puranik

使用T x{}; 其中T是某種類型,稱為零初始化

括號()Pre-C++11 ,而大括號{}來自C++11及以后(如 c++11、c++14 等)。 這只是兩者之間的眾多差異之一。 例如,

預 C++11

class MyVector
{
    int x;
    MyVector(): x()
    {
    }
};

C++11

從 C++11 及以后,您可以使用{}代替,如下所示:

class MyVector
{
    int x;
    MyVector(): x{}
    {
    }
};

構造函數初始化列表(這是您的問題所在)的上下文中,它們用於確保正確初始化class 模板的非靜態數據成員,如此所述。

根據 Scott meyors Effective Modern C++,第 7 項,您基本上應該在初始化列表中盡可能使用{} 如果您正在初始化一個采用std::initializer_list的類型,那么您需要多考慮一下。 但在std::vector和模板之外,您基本上應該始終使用{}來構造。 為什么? 從斯科特邁爾斯:

大括號初始化是最廣泛使用的初始化語法,它可以防止縮小轉換,並且不受 C++ 最令人頭疼的解析的影響。

暫無
暫無

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

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