这个问题与前面的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
关键字阻止了什么类型的构造呢?
答案 0 :(得分:5)
如果有人使用默认参数更改方法的签名,可能会很有趣:
struct Foo
{
explicit Foo(int, int = 0);
};
使用explicit
关键字,您会惯性地说您不希望构造函数执行隐式转换。
答案 1 :(得分:4)
如果我们有一个带有两个或更多参数的构造函数,那么
explicit
会阻止什么?
没有