Использование функции друга с константной ссылкой при перегрузке оператора

Код ниже не может быть скомпилирован. Однако, когда я удаляю "const" из функции Point& of friend, этот код оказывается скомпилированным. Кто-нибудь может объяснить причину?

class Point
{
  public:
    Point(double x, double y);
    Point operator+(const double& add);
    friend Point operator+(const double& add, const Point& p){return p+add;}
  private:
    double px, py;
};

Point::Point(double x, double y): px(x), py(y){}
Point Point::operator+(const double& add){
  return(Point(px+add, py+add));
}
int main(){}

1 ответ

Решение

Оператор + не помечен как const, но его пытаются вызвать с помощью ссылки на const. Указатели и ссылки на константы могут вызывать только те функции-члены, которые помечены как константы (поскольку компилятор определенно знает, что эти функции гарантированно не изменяют внутреннее состояние).

Другие вопросы по тегам