C++運算符重載限制介紹
文章轉自公眾號:Coder梁(ID:Coder_LT)
一、重載限制
上一篇我們講瞭在類和結構體當中重載運算符,關於運算符的重載並不是隨心所欲的。C++給出瞭一些限制,從而保證瞭規范,以及程序運行的準確性。
下面我們就來一一來看下:
1.必須至少有一個操作數是用戶定義的類型
這句話看不明白沒有關系,我們隻需要記住它的目的就好瞭。它的主要目的是為瞭防止用戶為瞭標準類型重載運算符。比如將+重載成兩個數的差,而不是和。
這種限制對創造性有一定的影響,沒有那麼靈活,但可以保證程序的正常運行。不會出現一些反人類的情況
2.不能違反運算符原來的規則
這一點很好理解,比如+號,它的運算就是計算兩個數的和。需要有兩個操作數,現在我們把它重載成一個操作數,就是違法的。
P p; +p;
同樣,我們也不能修改運算符的優先級,如果將加號運算符重載成兩個類相加,那麼新的運算符和原來的加號擁有一樣的優先級。
3.不能創建新運算符
這一點之前已經說過瞭,比如不能定義operator
@等這種原來沒有的運算符。
4.禁止名單
有一些運算符是禁止重載的,如:sizeof, ., ::, ?:, typeid, const_cast, dynamic_cast, reinterpret_cast, static_cast
這些運算符往往都有特殊的功能,直接從實現層面禁止重載。
5.部分運算符隻能通過成員函數重載
大多數運算符都可以通過成員函數以及非成員函數進行重載,但也有部分例外,隻能通過成員函數重載,
如:
=
:賦值運算符()
: 函數調用運算符[]
: 下標運算符->
: 箭頭符號
這裡的非成員函數看起來有些費解,之後我們會遇到,主要是指友元函數。
到此這篇關於C++運算符重載限制介紹的文章就介紹到這瞭,更多相關C++運算符重載限制內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- C++ RTTI與4種類型轉換的深入理解
- C++ 強制類型轉換詳解
- C++強制類型轉換(static_cast、dynamic_cast、const_cast、reinterpret_cast)
- C++超詳細講解RTTI和cast運算符的使用
- C++類型轉換運算符詳解