\'const Obj\'和\'Obj&\'是怎么回事?

问题描述

| 我想编写一个与std :: set兼容的类,因此我像这样重载了“小于”运算符。有用。
bool Segment::SVertex::operator<(const SVertex &rhs) const
{
    return id < rhs.id;
}
但是,由于我比C ++编写Java多,所以'rhs.id \'对我来说似乎很不舒服。所以我将其更改为\'rhs.getId()\',其中getId()只是一个普通的getter函数:
long SVertex::getId(){return id;}
原来是编译时错误:无法将\“ this \”指针从\“ const Segment :: SVertex \”转换为\“ Segment :: SVertex&\” (请注意,我的VS2008不是英语,并且我翻译了错误消息,因此上面的行不一定准确) 我只知道\'&\'表示通过引用传递,\'const \'禁止任何更改。我不完全了解幕后情况。     

解决方法

问题是您的吸气功能不是完全“正常”;你的吸气剂应该是
long SVertex::getId() const
{return id;}
注意最后的const:它告诉编译器/用户该方法不修改类的内部。因此,可以在运算符<也是const中使用它。 const成员函数只能调用其他也是const的成员函数。非const成员函数可以调用任何函数。     ,您的吸气剂必须恒定:
long SVertex::getId() const {return id;}
这表明它不会更改对象。     ,您的
rhs
const
,因此您不能更改它。另一方面,您的
getId
不会保证不更改
this
-它也必须是const:
int SVertex::getId() const { return id; }
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...