首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++运算符重载亟需注意的地方

2012-09-12 
C++运算符重载需要注意的地方有时候自己写一个类,需要重载运算符,但对于一些操作符(如、、等),可以在类

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;}

上面 f1会调到全局的函数operator ==,而f2会调到 CMyCls的成员函数operator ==。所以,最好的写法是只在类里或类外重载两个参数均为const的版本。




热点排行
Bad Request.