搜尋

首頁  >  問答  >  主體

重载操作符 - c++重载==操作符

bool operator==(const T& lhs, const T2& rhs);

像这样的重载似乎只对 (T)a==(T2)b有效, 但是反过来(T2)b==(T)a就不行了...
于是好像只有同时双向的进行重载:

bool operator==(const T& lhs, const T2& rhs);
bool operator==(const T2& lhs, const T& rhs) { return rhs == lhs; }

这样了?
正确的重载不同类型之间==操作符的作法是什么?

PHPzPHPz2804 天前571

全部回覆(3)我來回復

  • ringa_lee

    ringa_lee2017-04-17 11:49:25

    正確的做法是不要重載不同的自訂類型之間的==操作符。這麼做除了把讀程式碼的人弄暈外沒有一點好處。

    回覆
    0
  • 黄舟

    黄舟2017-04-17 11:49:25

    有兩個地方可能不太妥當。一個是不同的類別之間重載==運算符,有違慣例。另一個是定義為全域方法,破壞了封裝性。
    一般來說T和T2應該有一個共同的父類S,在S裡重載==運算子

    class S
    {
        // ...
        bool operator ==(const S& s);
        // ...
    };
    

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 11:49:25

    既然類型不同,那還有什麼比較的意義?
    如果真要比較,那麼應該先進行型別轉換。

    重載 == 運算子有兩種實作方式,一種在類別內部,參數一個就夠了;如果在外部實現,就使用兩個參數的版本。

    回覆
    0
  • 取消回覆