这个问题与前面的C++ 11标准(C++ 03)有关.explicit防止从一种类型到另一种类型的隐式转换.例如:
struct Foo
{
explicit Foo(int);
};
Foo f = 5; // will not compile
Foo b = Foo(5); // works
Run Code Online (Sandbox Code Playgroud)
如果我们有一个带有两个或更多参数的构造函数,会explicit阻止什么?我知道在C++ 11中你已经进行了初始化,因此它会阻止构造,例如:
struct Foo
{
explicit Foo(int, int);
};
Foo f = {4, 2}; // error!
Run Code Online (Sandbox Code Playgroud)
但是在C++ 03中我们没有支持初始化,所以explicit关键字阻止了什么类型的构造呢?
如果有人使用默认参数更改方法的签名,则可能会很有趣:
struct Foo
{
explicit Foo(int, int = 0);
};
Run Code Online (Sandbox Code Playgroud)
使用explicit关键字,您会习惯性地说您不希望构造函数执行隐式转换.