'const Obj'和'Obj&'有什么关系?

时间:2011-05-26 14:57:55

标签: c++ operator-overloading const

我想编写一个与std :: set兼容的类,所以我像这样重载“小于”运算符。它有效。

bool Segment::SVertex::operator<(const SVertex &rhs) const
{
    return id < rhs.id;
}

然而,由于我编写的Java不仅仅是C ++,'rhs.id'对我来说非常不舒服。所以我把它改成'rhs.getId()',其中getId()只是一个普通的getter函数:

long SVertex::getId(){return id;}

这结果是一个编译时错误:无法将“this”指针从“const Segment :: SVertex”转换为“Segment :: SVertex&amp;”

(请注意我的VS2008不是英文,我翻译了错误信息,所以上面的行不一定完全正确)

我只知道'&amp;'表示通过引用传递,'const'禁止任何更改。我并不完全理解幕后发生的事情。

3 个答案:

答案 0 :(得分:7)

问题是你的getter函数并不完全'正常';你的吸气者应该是

long SVertex::getId() const
{return id;}

注意最后的 const :它告诉编译器/用户此方法不会修改类的内部。因此,可以在您的运营商中使用它&lt;这也是const。 如果const成员函数也是const,则它们只能调用其他成员函数;非const成员函数可以调用任何。

答案 1 :(得分:5)

你的吸气剂必须是恒定的:

long SVertex::getId() const {return id;}

这表示它不会改变对象。

答案 2 :(得分:2)

您的rhsconst,因此您无法进行更改。另一方面,你的getId不承诺不改变this - 它也需要是const:

int SVertex::getId() const { return id; }