何时使用初始化列表构造函数?

Mar*_*ing 2 c++ initializer-list c++11

使用{}而不是()在构造函数中允许我在头文件中使用特定构造函数初始化类成员,如下所示:

class X {
    private:
        std::vector y{1, 2, 3};
};
Run Code Online (Sandbox Code Playgroud)

但是,我如何知道对于Z我使用的类Z z{a, b};将调用具有两个参数的构造函数Z::Z(int a, int b)- 而不是具有std::initializer_list?的那个?

我的意思是std::complex(1, 2)std::complex{1, 2}是相同的,但std::vector(3)std::vector{3}肯定不是.

除非我需要,我是否应该总是使用{}变体或使用?(){}

Tem*_*Rex 8

这是一个可以涵盖整本书章节的主题.请参阅Scott Meyers 最近的草案项目引用他即将推出的有效的现代C++(为了清晰而重新格式化):

大多数开发人员最终选择一种分隔符作为默认设置,仅在必要时使用另一种分隔符.

这两种方法都没有比另一种方法更好.我的建议是选择一个并始终如一地应用它.

  • 有趣的阅​​读.我目前感觉`{}`只是改变了问题: - / (2认同)