构造函数是否需要使用显式关键字来获取多个参数?

tem*_*boy 8 c++ c++03

这个问题与前面的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关键字阻止了什么类型的构造呢?

neu*_*uro 5

如果有人使用默认参数更改方法的签名,则可能会很有趣:

struct Foo
{
    explicit Foo(int, int = 0);
};
Run Code Online (Sandbox Code Playgroud)

使用explicit关键字,您会习惯性地说您不希望构造函数执行隐式转换.


Lig*_*ica 4

如果我们有一个带有两个或多个参数的构造函数,会explicit阻止什么?

没有什么。