Оператор литья - const vs non-const

У меня есть этот пример кода:

class Number 
{ 
  int i;
  public:
    Number(int i1): i(i1) {}
    operator int() const {return i;}
};

Каковы последствия удаления модификатора const от оператора литья? Это влияет на автоматическое кастинг и почему?

Ответы

Ответ 1

Если оператор преобразования не const, вы не можете преобразовать объекты const:

const Number n(5);
int x = n; // error: cannot call non-const conversion operator

Ответ 2

Версия const может быть вызвана независимо от того, является ли экземпляр class Number const или нет. Если оператор объявлен неконстантным, он может быть вызван только для не-const-объектов - когда вы пытаетесь неявно использовать его там, где его нельзя вызвать, вы получите ошибку компиляции.

Ответ 3

Если у вас есть такая функция:

void f(const Number& n)
{
  int n1 = n;
}

Он начнет выдавать ошибку компиляции, если вы удалите const в операторе литья.