Явное ключевое слово в конструкторе multi-arg?
Недавно я встретил какой-то странный класс, в котором было три конструктора:
class Class
{
public:
explicit Class(int );
Class(AnotherClass );
explicit Class(YetAnotherClass, AnotherClass );
// ...
}
Это не имеет для меня никакого смысла - я думал, что явное ключевое слово - защищать выбранную конструкцию компилятора из чужого типа.
Разрешено ли это? Если это так, что это значит?
Ответы
Ответ 1
В С++ 11 многопараметрические конструкторы могут быть неявно преобразованы в с инициализацией скобки.
Однако, прежде чем С++ 11 explicit
применяется только к конструкторам с одним аргументом. Для конструкторов с несколькими аргументами он игнорировался и не имел эффекта.