оператор приведения - const против non-const - PullRequest
14 голосов
/ 24 февраля 2010

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

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

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

Ответы [ 3 ]

28 голосов
/ 24 февраля 2010

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

const Number n(5);
int x = n; // error: cannot call non-const conversion operator
5 голосов
/ 24 февраля 2010

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

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

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

5 голосов
/ 24 февраля 2010

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

...