在运算符重载中将Friend函数与const引用一起使用

时间:2018-06-30 20:12:02

标签: c++ operator-overloading friend const-reference

下面的代码无法编译。但是,当我从好友函数的Point&中删除“ const”时,此代码将被编译。谁能解释原因?

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 :(得分:2)

operator +未被标记为const,但是尝试通过const引用进行调用。 常量指针和引用仅允许调用标记为常量的成员函数(因为编译器肯定知道确保这些函数不会修改内部状态)。