如果我有课
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 }
{
}
我在一次代码审查中被告知要使用统一初始化语法,即大括号初始化。在这种情况下有区别吗?或者它只是一种风格偏好?
如果我有课
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 }
{
}
我在一次代码审查中被告知要使用统一初始化语法,即大括号初始化。在这种情况下有区别吗?或者它只是一种风格偏好?
对于简单类型,例如您的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
如果您想了解为什么通常大括号 {} 初始化更好,请查看此答案,但引用 Scott Meyer 的书Effective Modern C++,我强烈推荐:
[...] 那么为什么这个条目的标题不是像“首选大括号初始化语法”之类的东西呢?支撑初始化的缺点是伴随它的有时令人惊讶的行为。[...]