Явное ключевое слово в конструкторе с несколькими аргументами? - PullRequest
33 голосов
/ 13 июля 2009

Недавно я столкнулся с каким-то странным классом, в котором было три конструктора:

class Class
{
    public:
        explicit Class(int );

        Class(AnotherClass );

        explicit Class(YetAnotherClass, AnotherClass );

    // ...
}

Это на самом деле не имеет смысла - я думал, что явное ключевое слово - защитить выбранную компилятором конструкцию от стороннего типа.

Это разрешено? Если это так, что это значит?

1 Ответ

51 голосов
/ 13 июля 2009

В C ++ 11 многопараметрические конструкторы могут быть неявно преобразованы в инициализацию фигурной скобкой.

Однако до C ++ 11 explicit применяется только к конструкторам с одним аргументом. Для конструкторов с несколькими аргументами он был проигнорирован, и не имел никакого эффекта .

...