我这篇帖子,我看过这个:
class MonitorObjectString: public MonitorObject { // some other declarations friend inline bool operator==(/*const*/ MonitorObjectString& lhs, /*const*/ MonitorObjectString& rhs) { return lhs.fVal==rhs.fVal; } }
在我们继续之前,这是非常重要的:
我不是在质疑任何人的编码能力.
我只是想知道为什么有人在比较中需要非const引用.
该问题 的海报没有写出该代码.
这是为了以防万一.这也很重要:
我添加了两个/*const*/
并重新格式化了代码.
现在,我们回到主题:
我想不出一个合理运算符的合理使用,它允许你修改它的by-ref参数.你呢?
他们很可能忘记了const
.运算符重载应该始终如一,并且不执行"超出字符"操作.
作为一般规则,相等运算符永远不应修改它正在比较的任何对象.声明const
在编译器级别强制执行此操作.但是,它经常被遗漏.在C++中经常忽略"Const正确性".
也许类使用延迟初始化的形式.访问数据时,必须进行正确的初始化,并且必须获取数据.这可能会改变班级成员.
但是,可以形成延迟初始化,以便不需要对类进行修改.这可以通过使用来完成PIMPL方法(通过一个指向私有类),或者通过使用可变关键字(不推荐!).