Конструктор, пропускающий explicit
спецификатор
Пропавшие без вести explicit
ключевое слово происходит, когда объявление конструктора не использует explicit
спецификатор. explicit
спецификатор предотвращает неявное преобразование из переменной другого типа к текущему типу класса.
Дефект применяется:
Конструкторы с одним параметром.
Конструкторы, где у всех кроме параметров есть значения по умолчанию.
Например, MyClass::MyClass(float f, bool b=true){}
.
Если вы не объявляете конструктора explicit
, компиляторы могут выполнить неожиданные и часто непреднамеренные преобразования типов к типу класса с помощью конструктора.
Неявное преобразование может произойти, например, когда функция принимает параметр типа класса, но вы вызываете функцию с аргументом другого типа.
Для лучшей удобочитаемости вашего кода и предотвратить неявные преобразования, в объявлении конструктора, помещают explicit
ключевое слово перед именем конструктора.
Если вы хотите преобразовать от переменной другого типа, явным образом вызовите конструктора класса и передайте переменную в качестве аргумента.
Группа: Объектно-ориентированный |
Язык: C++ |
Значение по умолчанию: 'off' |
Синтаксис командной строки: MISSING_EXPLICIT_KEYWORD |
Удар: низко |