我最近遇到了一些奇怪的类,它有三个构造函数:
class Class
{
public:
explicit Class(int );
Class(AnotherClass );
explicit Class(YetAnotherClass, AnotherClass );
// ...
}
这对我来说没有意义 - 我认为显式关键字是为了保护编译器选择的构造免受外来类型的影响。
这是允许的吗?如果它,它是什么意思?
答案 0 :(得分:51)
在C ++ 11中,可以使用大括号初始化隐式转换多参数构造函数。
但是,在C ++ 11 explicit
之前只应用于单参数构造函数。对于多参数构造函数,它被忽略并had no effect。