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