繁体   English   中英

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

[英]What's the matter with 'const Obj' and 'Obj &'?

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

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

但是,由于我写的 Java 比 C++ 多,所以“rhs.id”对我来说看起来很不舒服。 所以我把它改成'rhs.getId()',其中getId()只是一个普通的getter function:

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

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

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

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

问题是您的吸气剂 function 并不完全“正常”; 你的吸气剂应该是

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

注意最后的const :它告诉编译器/用户此方法不会修改类的内部结构。 因此,可以在运算符 < 中使用它,它也是 const。 const 成员函数只有也是 const 时才能调用其他成员函数; 非常量成员函数可以调用任何。

你的吸气剂必须是常数:

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

这表明它不会更改 object。

你的rhsconst ,所以你不能改变它。 另一方面,您的getId不是 promise 不改变this - 它也需要是 const:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM