Все определяемые пользователем операторы преобразования должны быть определены явным образом
Все определяемые пользователем операторы преобразования должны быть определены явным образом.
Если пользовательский оператор преобразования не определен с помощью explicit спецификатор, компиляторы могут выполнять неявные и часто непреднамеренные преобразования типов из типа класса с возможными неожиданными результатами.
Неявное преобразование может произойти, например, когда функция принимает параметр типа, отличного от типа класса, передаваемого в качестве аргумента. Например, вызов func здесь вызывает неявное преобразование из типа myClass кому int:
class myClass {} {
...
operator int() {...}
};
myClass myClassObject;
void func(int) {...}
func(myClassObject);
Средство проверки помечает объявления или определения в классе определяемых пользователем операторов преобразования, которые не используют explicit спецификатор.
Например, operator int() {} может преобразовать переменную текущего типа класса в int переменная как неявно, так и явно, но explicit operator int() {} может выполнять только явные преобразования.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Перегрузка |
| Категория: Обязательно, Автоматизировано |