本问题涉及C++11(C++03)的先前标准。 explicit
防止从一种类型到另一种类型的隐式转换。例如:
struct Foo
{
explicit Foo(int);
};
Foo f = 5; // will not compile
Foo b = Foo(5); // works
如果我们有一个构造函数需要两个或更多参数,
explicit
会防止什么?我知道在C++11中你可以使用花括号初始化,所以它将防止以下构造方式:struct Foo
{
explicit Foo(int, int);
};
Foo f = {4, 2}; // error!
但在C++03中,我们没有花括号初始化,那么explicit
关键字在这里阻止了什么样的构造?