"const Obj"和"Obj &"是怎么回事?
What's the matter with 'const Obj' and 'Obj &'?
我想写一个与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&"
(注意,我的VS2008不是英语,我翻译了错误消息,所以上面的行不一定准确)
我只知道"&"表示通过引用传递,"const"禁止任何更改。我不太明白幕后发生了什么。
问题是getter函数并不完全是"正常"的;你的吸气剂应该是
long SVertex::getId() const
{return id;}
请注意结尾处的const:它告诉编译器/用户该方法不会修改类的内部。因此,可以在您的运算符<这也是常数。Const成员函数只能在其他成员函数也是Const的情况下调用它们;非常数成员函数可以调用任意函数。
您的getter必须是常量:
long SVertex::getId() const {return id;}
这表明它不会改变对象。
您的rhs
是const
,因此不允许更改它。另一方面,您的getId
并不承诺不更改this
,它还需要常量:
int SVertex::getId() const { return id; }
相关文章:
- 使用递归的数组的最小值.这是怎么回事
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 绕道重铸瓷砖层是怎么回事
- 架 (U+67B6) 与en_US不符.UTF-8.这是怎么回事?
- R 中的算术在数字上比整数更快。这是怎么回事?
- 我的代码运行良好,但现在当尝试将其制作成模板时,我遇到了许多看似无关的错误。这是怎么回事?
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 弄清楚这段代码是怎么回事(递归下降案例研究)
- 分配器密集和稀疏是怎么回事?
- 传递引用C++,指针的向量.这是怎么回事?
- __vector_base_common是怎么回事?
- (对象)不命名类型.怎么回事
- 变量已在 .obj 中定义;这是怎么回事?
- Sublime上的EasyClangComplete是怎么回事?
- 重复输出的类型是怎么回事,它如何区分迭代次数和 Ascii 代码?
- 标准::地图使用.这是怎么回事?核心转储?我做得不正确?
- llvm libcxx的源代码是怎么回事?
- 这一行是怎么回事: istringstream is( line );
- "const Obj"和"Obj &"是怎么回事?