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

时间:2015-03-19 13:38:46

标签: c++ c++03

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:4)

  

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

没有