考虑一下这段代码
输出是
据我理解,值
附注:如果我将构造函数
#include <iostream>
class Foo
{
int val_;
public:
Foo(std::initializer_list<Foo> il)
{
std::cout << "initializer_list ctor" << std::endl;
}
/* explicit */ Foo(int val): val_(val)
{
std::cout << "ctor" << std::endl;
};
};
int main(int argc, char const *argv[])
{
// why is the initializer_list ctor invoked?
Foo foo {10};
}
输出是
ctor
initializer_list ctor
据我理解,值
10
被隐式转换为Foo
(第一个ctor
输出),然后初始化构造函数开始执行(第二个initializer_list ctor
输出)。我的问题是为什么会发生这种情况?难道标准构造函数Foo(int)
不是更好的匹配吗?也就是说,我本来期望这段代码的输出只有ctor
。附注:如果我将构造函数
Foo(int)
标记为explicit
,那么只会调用Foo(int)
构造函数,因为整数10
现在无法隐式转换为Foo
。