У меня есть этот пример кода:
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
Если у вас есть такая функция:
void f(const Number& n)
{
int n1 = n;
}
Он начнет выдавать ошибку компиляции, если вы удалите const в операторе приведения.
Версия const
может быть вызвана независимо от того, используется ли ] class Number
константа или нет. Если оператор объявлен неконстантным, он может быть вызван только для неконстантных сущностей - при попытке неявно использовать его там, где он не может быть вызван, вы получите ошибку компиляции.