[英]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 等)。 這只是兩者之間的眾多差異之一。 例如,
class MyVector
{
int x;
MyVector(): x()
{
}
};
從 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.