You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将operator<定义为类成员函数以适配std::less使用?

问题解答

结论

完全可以将operator<定义为类成员函数来适配std::less使用,你的代码错误是成员函数没有添加const修饰符。

报错原因分析

std::less的调用逻辑是接收两个**const T&**类型的参数执行比较,即参与比较的左操作数本身也是const类型。你当前写的成员函数:

bool operator < (const myClass &obj)
{
    return y < obj.y;
}

没有加const修饰,意味着this指针指向的调用对象是可修改的,无法绑定到const myClass类型的左操作数上,因此编译器会抛出passing ‘const myClass*’ as ‘this’ argument discards qualifiers的错误。

修复方案

只需要在成员函数的参数列表后添加const修饰符即可,正确写法如下:

bool operator < (const myClass &obj) const
{
    return y < obj.y;
}

const修饰符表示该成员函数不会修改类的任何成员,允许通过const对象调用该函数,刚好匹配std::less对两个const参数进行比较的要求。

内容的提问来源于stack exchange,提问作者kadina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:57:03