использование функции друга с константной ссылкой при перегрузке оператора - PullRequest
0 голосов
/ 30 июня 2018

Код ниже не может быть скомпилирован. Однако, когда я удаляю «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 Ответ

0 голосов
/ 30 июня 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...