繁体   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