I recently came across some weird looking class that had three constructors:
class Class
{
public:
explicit Class(int );
Class(AnotherClass );
explicit Class(YetAnotherClass, AnotherClass );
// ...
}
This doesn't really make sense to me - I thought the explicit keyword is to protect compiler chosen construction from a foreign type.
Is this allowed? If it it, what does it mean?
Roger Lipscombe
In C++11 multi-parameter constructors can be implicitly converted to with brace initialization.
However, before C++11 explicit
only applied to single-argument constructors. For multiple-argument constructors, it was ignored and had no effect.
来源:https://stackoverflow.com/questions/1118680/explicit-keyword-on-multi-arg-constructor