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