我是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
的构造函数的形式?感谢。
答案 0 :(得分:1)
我认为这就是它发生的方式。摘自:Explanation of list initialization at cppreference.com
如果前一个阶段没有产生匹配,则T的所有构造函数都参与对由braced-init-list元素组成的参数集的重载解析,并限制只允许非缩小转换。如果此阶段产生显式构造函数作为复制列表初始化的最佳匹配,则编译失败(注意,在简单的复制初始化中,根本不考虑显式构造函数)