当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《一个operator==,其参数是非const引用》经验,为你挑选了2个好方法。

我这篇帖子,我看过这个:

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参数.你呢?



1> Andrew Rolli..:

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

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



2> strager..:

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

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

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有