fwo*_*nce 2 c++ const operator-overloading
我想写一个与std :: set兼容的类,所以我像这样重载"小于"运算符.有用.
bool Segment::SVertex::operator<(const SVertex &rhs) const
{
return id < rhs.id;
}
Run Code Online (Sandbox Code Playgroud)
但是,由于我写的Java比C++更多,'rhs.id'对我来说看起来很不舒服.所以我把它改成'rhs.getId()',其中getId()只是一个普通的getter函数:
long SVertex::getId(){return id;}
Run Code Online (Sandbox Code Playgroud)
这结果是编译时错误:无法将"this"指针从"const Segment :: SVertex"转换为"Segment :: SVertex&"
(注意我的VS2008不是英文版,我翻译了错误信息,所以上面的行不一定准确)
我只知道'&'表示通过引用传递,'const'禁止任何更改.我并不完全理解幕后发生的事情.
问题是你的getter函数并不完全"正常"; 你的吸气剂应该是
long SVertex::getId() const
{return id;}
Run Code Online (Sandbox Code Playgroud)
注意最后的const:它告诉编译器/用户这个方法不会修改类的内部.因此,可以在运算符中使用它<也是const.如果const成员函数也是const,则它们只能调用其他成员函数; 非const成员函数可以调用any.
你的吸气剂必须是恒定的:
long SVertex::getId() const {return id;}
Run Code Online (Sandbox Code Playgroud)
这表示它不会改变对象.