目前正试图围绕 C++11 的统一初始化进行思考。我遇到了这个模棱两可的情况:考虑一个类,它可以由一个双参数构造函数或一个任意长度的初始化列表构造:
class Foo {
public:
Foo(int a, int b) {
std::cout << "constructor 1" << std::endl;
}
Foo(std::initializer_list<int>) {
std::cout << "constructor 2" << std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)
遵循统一的初始化约定,我希望以下内容起作用:
Foo a (1, 2)印刷品constructor 1(废话)
Foo b {1, 2} 印刷 constructor 1
Foo c = {1, 2} 印刷 constructor 2
但是,编译器似乎将其解释Foo b {1, 2}为列表初始化,并调用构造函数 2。()当存在初始化列表构造函数时,语法是否是强制编译器考虑其他类型构造函数的唯一方法?