任何人都可以解释为什么非单参数构造函数被标记为显式编译? 据我所知,这里绝对是无用的关键字,为什么这个编译没有错误?
class X
{
public:
explicit X(int a, int b) { /* ... */}
};
答案 0 :(得分:10)
在C ++ 03中,在这种特殊情况下,将两个参数构造函数标记为explicit
是没有意义的。但这里有意义:
explicit X(int i, int j=42);
因此,使用explicit
标记两个参数构造函数不一定是错误。
在C ++ 11中,使用explicit会阻止你这样做:
X x = {1,2};
答案 1 :(得分:7)
不完全正确。
在C ++ 11中,可以使用大括号初始化隐式转换具有多个参数的构造函数。