-1

如果我有课

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

}

我在一次代码审查中被告知要使用统一初始化语法,即大括号初始化。在这种情况下有区别吗?或者它只是一种风格偏好?

4

1 回答 1

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

如果您想了解为什么通常大括号 {} 初始化更好,请查看此答案,但引用 Scott Meyer 的书Effective Modern C++,我强烈推荐:

[...] 那么为什么这个条目的标题不是像“首选大括号初始化语法”之类的东西呢?支撑初始化的缺点是伴随它的有时令人惊讶的行为。[...]

于 2018-07-01T18:17:39.743 回答