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