C++运算符重载需要注意的地方
有时候自己写一个类,需要重载运算符,但对于一些操作符(如==、<、>等),可以在类里写,也可以在类外写。那么 C++ 编译器会去怎么调用呢?
首先,我们知道,“重载” 机制可以允许多个函数有相同的函数名,但参数列表必须不同。C++编译器经过名字改编(name mangling),可以在调用时依据所传实参找到“最符合”的函数实体进行调用。而运算符重载亦是如此。
首先,我们有一个类:
class CMyCls{public:bool operator == (const CMyCls& rhs){// ...}};bool operator == (const CMyCls& lhs, const CMyCls& rhs){// ...}void f1(const CMyCls& lhs, const CMyCls& rhs){lhs == rhs;}void f2(CMyCls& lhs, const CMyCls& rhs){lhs == rhs;}