如果我有课
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 }
{
}
在代码审查中,我被告知要使用统一初始化语法,即括号初始化。在这种情况下有区别吗?还是仅仅是样式偏好?
答案 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 ++ ,我强烈建议:
[...]那么为什么不是这个项目 标题为“首选支撑初始化语法”的标题? 初始化初始化的缺点是有时令人惊讶的行为 伴随着它。 [...]