【问题标题】:Usage of Uniform Initialization Syntax统一初始化语法的使用
【发布时间】:2018-07-01 15:10:31
【问题描述】:

如果我有课

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

}

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

【问题讨论】:

  • 这种情况下的结果是完全一样的。区别纯粹是风格上的。

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


【解决方案1】:

在简单类型的情况下,例如 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++,其中我强烈推荐:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多