Ответ 1
Если оператор преобразования не const, вы не можете преобразовать объекты const:
const Number n(5);
int x = n; // error: cannot call non-const conversion operator
У меня есть этот пример кода:
class Number
{
int i;
public:
Number(int i1): i(i1) {}
operator int() const {return i;}
};
Каковы последствия удаления модификатора const
от оператора литья?
Это влияет на автоматическое кастинг и почему?
Если оператор преобразования не const, вы не можете преобразовать объекты const:
const Number n(5);
int x = n; // error: cannot call non-const conversion operator
Версия const
может быть вызвана независимо от того, является ли экземпляр class Number
const или нет. Если оператор объявлен неконстантным, он может быть вызван только для не-const-объектов - когда вы пытаетесь неявно использовать его там, где его нельзя вызвать, вы получите ошибку компиляции.
Если у вас есть такая функция:
void f(const Number& n)
{
int n1 = n;
}
Он начнет выдавать ошибку компиляции, если вы удалите const в операторе литья.