显式非单参数构造函数

时间:2013-11-27 13:41:50

标签: c++ constructor explicit-constructor

任何人都可以解释为什么非单参数构造函数被标记为显式编译? 据我所知,这里绝对是无用的关键字,为什么这个编译没有错误?

class X
{
public:
    explicit X(int a, int b) { /* ... */}
};

2 个答案:

答案 0 :(得分:10)

在C ++ 03中,在这种特殊情况下,将两个参数构造函数标记为explicit是没有意义的。但这里有意义:

explicit X(int i, int j=42);

因此,使用explicit标记两个参数构造函数不一定是错误。

在C ++ 11中,使用explicit会阻止你这样做:

X x = {1,2};

答案 1 :(得分:7)

不完全正确。

在C ++ 11中,可以使用大括号初始化隐式转换具有多个参数的构造函数。