一个operator ==,其参数是非const引用

pyo*_*yon 2 c++ const operators equals-operator

这篇帖子,我看过这个:

class MonitorObjectString: public MonitorObject {
    // some other declarations
    friend inline bool operator==(/*const*/ MonitorObjectString& lhs,
                                  /*const*/ MonitorObjectString& rhs)
    { return lhs.fVal==rhs.fVal; }
}
Run Code Online (Sandbox Code Playgroud)

在我们继续之前,这是非常重要的:

  • 不是在质疑任何人的编码能力.
  • 只是想知道为什么有人在比较中需要非const引用.
  • 问题 的海报没有写出该代码.

这是为了以防万一.这也很重要:

  • 我添加了两个/*const*/并重新格式化了代码.

现在,我们回到主题:

我想不出一个合理运算符的合理使用,它允许你修改它的by-ref参数.你呢?

And*_*ngs 5

他们很可能忘记了const.运算符重载应该始终如一,并且不执行"超出字符"操作.

作为一般规则,相等运算符永远不应修改它正在比较的任何对象.声明const在编译器级别强制执行此操作.但是,它经常被遗漏.在C++中经常忽略"Const正确性".


str*_*ger 5

也许类使用延迟初始化的形式.访问数据时,必须进行正确的初始化,并且必须获取数据.这可能会改变班级成员.

但是,可以形成延迟初始化,以便不需要对类进行修改.这可以通过使用来完成PIMPL方法(通过一个指向私有类),或者通过使用可变关键字(不推荐!).