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