在运算符重载中使用带有 const 引用的友元函数
using friend function with const reference in operator overloading
无法编译以下代码。但是,当我从 friend 函数的 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(){}
operator+ 未标记为 const,但试图通过 const 引用调用。
常量指针和引用只允许调用标记为常量的成员函数(因为编译器肯定知道这些函数确保不会修改内部状态)。
无法编译以下代码。但是,当我从 friend 函数的 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(){}
operator+ 未标记为 const,但试图通过 const 引用调用。 常量指针和引用只允许调用标记为常量的成员函数(因为编译器肯定知道这些函数确保不会修改内部状态)。