构造函数使用多个参数时所需的显式关键字

Is the explicit keyword needed with a constructor taking more than one parameter?

本文关键字:关键字 参数 构造函数      更新时间:2023-10-16

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

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

struct Foo
{
    explicit Foo(int, int = 0);
};

使用explicit关键字,您可以习惯地说,您永远不希望构造函数进行隐式转换。

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

什么都没有。