统一初始化语法的用法

时间:2018-07-01 15:10:31

标签: c++ c++11 uniform-initialization member-initialization

如果我有课

class Foo
{
public:
    Foo();
    Foo(int bar);

private:
    int m_bar;
}

这两种初始化成员的方式有什么区别

Foo::Foo(int bar):
    m_bar(bar)
{

}

Foo::Foo(int bar):
    m_bar{ bar }
{

}

在代码审查中,我被告知要使用统一初始化语法,即括号初始化。在这种情况下有区别吗?还是仅仅是样式偏好?

1 个答案:

答案 0 :(得分:2)

对于简单类型,例如您的情况 int ,没有什么区别。但是,STL中std :: vector的初始化将完全不同

std::vector<int> v1(3,1); // v1 consists of: 1, 1, 1
std::vector<int> v2{3,1}; // v2 consists of: 3, 1

如果您想了解为什么通常大括号{}初始化更好的方法,请查看此answer,不过引自Scott Meyer的书 Effective Modern C ++ ,我强烈建议:

  

[...]那么为什么不是这个项目   标题为“首选支撑初始化语法”的标题?   初始化初始化的缺点是有时令人惊讶的行为   伴随着它。 [...]