C++构造函数初始化列表中使用括号或花括号的用法。

3
我对构造函数初始化列表有一个问题: 在指定成员的初始值时,根据C++ Primer书籍(作者- Stanley Lippman)的说法,初始值应写在() -圆括号中。然而,我也看到{}被用于指定初始值(请参考链接-https://en.cppreference.com/w/cpp/language/constructor) 有人可以解释一下何时使用() -圆括号和何时使用{}-花括号吗? 谢谢和问候, -Sunil Puranik

2
这个回答解决了你的问题吗?C++中初始化对象的不同方式 - S4eed3sm
2个回答

3
根据Scott Meyors的《Effective Modern C++》第7条,你应该在初始化列表中尽可能使用{}。如果您正在初始化需要std::initializer_list类型的变量,则需要更加深入地考虑。但是除了std::vector和模板之外,您基本上应该始终使用{}进行构造。为什么?因为如Scott Meyors所说,大括号初始化是最广泛可用的初始化语法,它可以防止收窄转换,并且免受C ++中最令人烦恼的解析的影响。

Scott Meyers!感谢您的回答。 - kingsjester

1

使用T x {};,其中T是某种类型,被称为零初始化

括号()Pre-C++11,而花括号{}是从C++11开始的(如c++11,c++14等)。这只是两者之间许多差异中的一个。例如,

Pre C++11

class MyVector
{
    int x;
    MyVector(): x()
    {
    }
};

C++11

从C++11开始,你可以像下面这样使用{}

class MyVector
{
    int x;
    MyVector(): x{}
    {
    }
};

在构造函数初始化列表的上下文中(这也是您问题的关键),它们被用于确保类模板的非静态数据成员得到适当的初始化,如此所述。请注意,保留HTML标签。

@SunilPuranik 不用谢。关于为什么需要它们,您可以参考这个 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接