轉:
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