构造函数中的std :: initializer_list转换

时间:2016-06-30 05:32:26

标签: c++ c++11 initializer-list

我是C ++ 11的新手,我想知道这段代码是如何在内部运作的:

class MyClass
{
    public:
        MyClass(int a, double b) {
            cout << "ctor()" << endl;
        }
};

int main()
{
    MyClass i1{4, 7};
    return 0;
}

我对新的初始化列表的理解是,它是由代码中的特殊语法std::initializer_list构造的类{ .... }。那么{4, 7}在内部创建的这个类实例如何在内部转换为适合MyClass的构造函数的形式?感谢。

1 个答案:

答案 0 :(得分:1)

我认为这就是它发生的方式。摘自:Explanation of list initialization at cppreference.com

  

如果前一个阶段没有产生匹配,则T的所有构造函数都参与对由braced-init-list元素组成的参数集的重载解析,并限制只允许非缩小转换。如果此阶段产生显式构造函数作为复制列表初始化的最佳匹配,则编译失败(注意,在简单的复制初始化中,根本不考虑显式构造函数)