在 C++ 构造函数初始化列表中使用圆括号或花括号 [重复]

问题描述 投票:0回答:2

我有一个关于构造函数初始化列表的问题如下: 在指定成员的初始值时,根据 C++ Primer 书(作者 - Stanley Lippman),初始值写在 ()- 括号中。但是,我也看到 {} 被用来指定初始值(请参考链接 - https://en.cppreference.com/w/cpp/language/constructor) 有人可以解释何时使用 () - 括号以及何时使用 {} - 大括号 感谢致敬, -sunil puranik

c++ list constructor initializer
2个回答
3
投票

根据 Scott meyors 的 Effective Modern C++,第 7 项,您基本上应该在初始化列表中的任何地方使用

{}
。如果您正在初始化一个采用
std::initializer_list
的类型,那么您需要多考虑一下。但是在
std::vector
和模板之外,你基本上应该总是使用
{}
来构建。为什么?来自 Scott Meyors:

大括号初始化是最广泛使用的初始化语法,它防止 缩小转换,并且它不受 C++ 最令人烦恼的解析的影响。


1
投票

使用

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{}
    {
    }
};

contextconstructor initializer list(这是你的问题是什么)他们被用来 ensure proper initialization of non-static data members of a class template as explained here.

© www.soinside.com 2019 - 2024. All rights reserved.