我对构造函数初始化列表有一个问题:
在指定成员的初始值时,根据C++ Primer书籍(作者- Stanley Lippman)的说法,初始值应写在() -圆括号中。然而,我也看到{}被用于指定初始值(请参考链接-https://en.cppreference.com/w/cpp/language/constructor)
有人可以解释一下何时使用() -圆括号和何时使用{}-花括号吗?
谢谢和问候,
-Sunil Puranik
{}
。如果您正在初始化需要std::initializer_list
类型的变量,则需要更加深入地考虑。但是除了std::vector
和模板之外,您基本上应该始终使用{}
进行构造。为什么?因为如Scott Meyors所说,大括号初始化是最广泛可用的初始化语法,它可以防止收窄转换,并且免受C ++中最令人烦恼的解析的影响。使用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{}
{
}
};