我有一个关于构造函数初始化列表的问题如下: 在指定成员的初始值时,根据 C++ Primer 书(作者 - Stanley Lippman),初始值写在 ()- 括号中。但是,我也看到 {} 被用来指定初始值(请参考链接 - https://en.cppreference.com/w/cpp/language/constructor) 有人可以解释何时使用 () - 括号以及何时使用 {} - 大括号 感谢致敬, -sunil puranik
根据 Scott meyors 的 Effective Modern C++,第 7 项,您基本上应该在初始化列表中的任何地方使用
{}
。如果您正在初始化一个采用 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{}
{
}
};
在 context 的 constructor initializer list(这是你的问题是什么)他们被用来 ensure proper initialization of non-static data members of a class template as explained here.