14 January 2023

C++ 核心指南目录

C.160: Define operators primarily to mimic conventional usage

理由

这样做就不会让人觉得奇怪。

例子

class X {
public:
    // ...
    X& operator=(const X&); // member function defining assignment
    friend bool operator==(const X&, const X&); // == needs access to representation
                                                // after a = b we have a == b
    // ...
};

此处,我们维护了习惯语义:拷贝之后,进行比较的话,结果应该是相等的。

例子

X operator+(X a, X b) { return a.v - b.v; }   // bad: makes + subtract

注意

非成员的操作符要么是友元的,要么与操作对象一起定义在相同的名字空间。二元操作符应当将操作对象同等对待。