添加const对象

时间:2013-01-26 19:55:08

标签: c++

我有一个自定义类。我们称之为苹果。我重载了加法运算符:

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对象有什么技巧吗?

1 个答案:

答案 0 :(得分:6)

您需要将加法运算符标记为const

apple apple::operator+(const apple & other) const;

运算符的当前形式不保证this不会被变异(即使它实际上没有变异),所以当加法的LHS是const apple时,编译器不能使用它并抱怨没有合适的操作员。

请注意,通常的做法是通过定义自由函数operator+而不是成员来实现自定义添加,因为这样编译器可以使用构造函数将加法的LHS转换为apple如果需要 - 如果operator+是成员函数,则无法执行此操作。