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