C 運算子中不能重載的有:1、條件運算子「?:」;2、成員存取運算子「.」;3、域運算子「::」;4、長度運算符「sizeof」;5、成員指標存取運算子「->*」和「.*」 。
相關推薦:《C 影片教學》
重載:讓運算子可以有新的語義,而不是更改語法,否則會造成混亂。
重載的部分規則:運算函數的參數至少有一個必須是類別的物件或類別的物件的參考。
而C 中無法重載的運算子有5個,分別為:
「?:」(條件運算子)
“.”(成員存取運算子)
“::”(網域運算子)
“sizeof” (長度運算子)
“->*”和“.*” (成員指標存取運算子)
那麼這幾個運算子為什麼不能進行重載?原因介紹:
(1)「?:」
#假設可以重載,那我們來看下列的程式碼:
exp1 ? exp2 : exp3
該運算子的意思是執行exp2和exp3中的一個,假設重載了,就不可以保證執行一個還是兩個,還是都沒執行,該運算子的跳轉性質就不復存在了。所以,「?:」不能被重載。
(2)“.”
假設可以重載,我們可以假設一種情況,創建一個對象,呼叫該對象的函數。
class Y{ public: void fun(); }; class X{ public: Y* p; Y& operator.(){ return *p; } void fun(); } void g(X& x){ x.fun(); }
這個例子中,x.fun()就不知道是呼叫哪一個fun函數了。
「.」運算子的意思是引用物件成員,然而被重載後就不能保證了,導致運算子意義的混淆。
(3)“::”
該運算子只是在編譯的時候域解析,而沒有運算參與。根據重載的規則,如果重載該運算符,就賦予了新的語義,可能會出現混淆。
(4)“sizeof”
#不能被重載的原因主要是內部許多指標都依賴sizeof。
(5)“->*”和“.*”
#引用指向類別成員的指標
更多程式設計相關知識,請造訪:程式設計入門! !
以上是C++運算子中不能重載的是哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!