C++:关于“operator==”运算符重载理解 error: no match for ‘operator==’

一、引文

事情是这样的,我类似写了这样一段代码(简略版):

struct cvPoint {
    cvPoint() {}
    cvPoint(int a, int b) : x(a), y(b) {}
    int x; 
    int y; 

    // 自定义结构体的 “==” 运算符重载
    bool operator==(const cvPoint &b) {
        bool temp = (this->x == b.x && this->y == b.y);
        return temp;
    }
};

bool isSame(const cvPoint &a, const cvPoint &b) {
    if (a == b) {
        return true;
    } else {
        return false;
    }
}

int main() {
    cvPoint a(1, 2);
    cvPoint b(1, 3);
    isSame(a, b);
    return 0;
}

第一印象大家会觉得有问题吗? 实际上编译报错了
在这里插入图片描述
error: no match for ‘operator==’ (operand types are ‘const value_type’ )


然后我就纳闷了,将 isSame(a, b)函数删掉,将里面的内容移出来,发现不报错了

int main() {
    cvPoint a(1, 2);
    cvPoint b(1, 3);
    if (a == b) {
      return 1;
    } else {
      return 0;
    }
    return 0;
}

不禁陷入了沉思。。。。。。。

二、理解

首先怀疑的就是传参const + "&"导致的,果不其然真就是这样,怎么解释呢?查看资料,得出结论:

    //  “==” 运算符重载 一般需要加两个const 
    bool operator==(const cvPoint &b) const {
        bool temp = (this->x == b.x && this->y == b.y);
        return temp;
    }
   // 括号内第一个const表示传入的参数可以接收const也可以接收非const;   第二个const表示常量可以调用该函数
结论: 很明显代码中isSame函数传入的参数是一个const类型,调用者也是一个const类型。所以解决办法就是:写 “==” 运算符重载需要加上两个const。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值