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