[英]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.