转:
http://www.diybl.com/course/3_program/c++/cppjs/2008611/124644.html一、不可以被重载的操作符
1.域操作符::
2.取成员指针操作符.*
3.成员操作符.
4.选择操作符?:
二、重载操作符必须有一个类类型操作数
用于内置类型的操作符,其含义不能改变,也不能为内置类型定义新的操作符。
三、重载的操作符的优先级、结合性或操作数数目都不能改变。除了函数调用操作符operator()之外,重载操作符时使用默认实参是非法的。
四、重载操作符并不能保证操作数的求值顺序
逻辑与(&&)、逻辑或(||)经重载后没有短路求值特性
逗号(,)经重载后也不保证从左到右依次计算
五、重载操作符可以定义为类成员函数或普通的非成员函数
类成员函数有一隐含的this指针参数
六、操作符重载为普通非成员函数时,通常须将其声明为所操作类的友元。
重载操作符的设计
1.不要重载具有内置含义的操作符
赋值操作符(=)、取地址操作符(&)、逗号操作符(,)对类类型有默认含义:合成的赋值操作符进行逐个成员赋值;取地址操作符返回对象地址;逗号操作符从左到右计算每个表达式的值,并返回最右边操作数的值。
2.大多数操作符对类对象没有意义
除非提供了了重载定义,赋值操作符(=)、取地址操作符(&)、逗号操作符(,)对类类型操作数没有定义。
3.若一个类有算数操作符或位操作符,则提供相应的复合赋值操作符是好的做法。
4.用作关联容器的健类型的类应该定义小于操作符(<);用作顺序容器元素类型的类应该定义相等操作符(==)、小于操作符(<)
5.选择成员或非成员实现
(1)赋值操作符(=),下标操作符([]),函数调用操作符(()),指针成员访问箭头(->)必须重载为类成员函数。
(2)复合赋值操作符应定义为类成员函数;但定义为非成员函数也不会出线编译错误。
(3)改变对象状态或与给定类型紧密联系的操作符应定义为类成员。如自增操作符(++)、自减操作符(--)应定义为类成员。
(4)对称的操作符如算术操作符、相等操作符、关系操作符和位操作符应定义为非成员。
文章出处:
http://www.diybl.com/course/3_program/c++/cppjs/2008611/124644.html