Явный конструктор (explicit)
В C++ конструкторы можно объявлять с ключевым словом explicit:
В стандарте за использование слова explicit в конструкторе отвечает раздел 12.3.1 Conversion by constructor [class.conv.ctor].
Слово explicit с английского переводится как “явный”, при использовании конструктора c ним нельзя будет неявно(implicit) преобразовать объекты(преобразование идет путем вызова конструктора) :
По умолчанию, если не указано слово explicit, конструктору разрешено делать неявные преобразования.
Пусть у нас есть класс Rational(этот пример взят из книги Скотта Мейерса, из 50 советов, совет 19) :
Тогда для данного класса допустимо использование :
Потому что последняя строчка вызовет operator* и неявно сконвертирует 2 к типу Rational используя конструктор :
И если в данном примере объявить Rational конструктор как explicit, то компилятор выдаст ошибку о том, что явный конструктор использовуется неявно(implicitly).