我有一个自定义类。我们称之为苹果。我重载了加法运算符:
apple apple::operator+(const apple & other)
{
return apple
(
this->x + other.x,
this->y + other.y,
this->z + other.z
);
}
并且效果很好......直到我尝试添加两个常量苹果。
const apple apple1;
const apple apple2;
auto apple3 = apple1 + apple2;
给我一个错误'无操作符'+“匹配这些操作数 操作数类型是:const apple + const apple'
添加const对象有什么技巧吗?
答案 0 :(得分:6)
您需要将加法运算符标记为const
:
apple apple::operator+(const apple & other) const;
运算符的当前形式不保证this
不会被变异(即使它实际上没有变异),所以当加法的LHS是const apple
时,编译器不能使用它并抱怨没有合适的操作员。
请注意,通常的做法是通过定义自由函数operator+
而不是成员来实现自定义添加,因为这样编译器可以使用构造函数将加法的LHS转换为apple
如果需要 - 如果operator+
是成员函数,则无法执行此操作。