代码之家  ›  专栏  ›  技术社区  ›  isekaijin

参数为非常量引用的运算符==

  •  2
  • isekaijin  · 技术社区  · 16 年前

    this post ,我看到了:

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

    这非常重要:

    • 我是 任何人的编码能力。
    • 我是 只是想知道
    • 海报 that question 编写代码。

    • 我加了两个 /*const*/

    现在,我们回到主题:

    我想不出一个合理的等式操作符的用法,它允许您修改它的by-ref参数。你…吗?

    5 回复  |  直到 7 年前
        1
  •  5
  •   Community Nick Bolton    7 年前

    Pimpl idiom (通过指向私有类的指针)或使用 mutable keyword (不推荐!)。

        2
  •  5
  •   Andrew Rollings    16 年前

    很可能他们忘记了 const . 运算符重载 应该 始终如一地表现,不要做出“不符合个性”的行为。

    常数 在编译器级别强制执行此操作。然而,它常常被忽略。C++中经常忽略“const正确性”。

        3
  •  2
  •   Drew Dormann    16 年前

    如果我有两个 MonitorObjectString

        4
  •  1
  •   Will Dean    16 年前

    在这种情况下,显然没有对非常量参数的要求,而且,像您一样,我也不认为有任何通用的情况。

        5
  •  1
  •   David Thornley    16 年前

    如果因为修改操作数而不能使用const,那么就严重误用了运算符重载。

    如果因为实现调用了非常量函数而不能使用常量,那么您真的应该清理这些函数,或者至少提供常量替代方案。

    如果你在调用不使用const的无法更改的代码,我无论如何都会使用const,在最深的可用点使用const_cast,并对其进行注释。

    推荐文章