能否将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
相关产品推荐
相关产品推荐

