網站首頁 編程語言 正文
?文章轉自公眾號:Coder梁(ID:Coder_LT)
一、重載限制
上一篇我們講了在類和結構體當中重載運算符,關于運算符的重載并不是隨心所欲的。C++給出了一些限制,從而保證了規范,以及程序運行的準確性。
下面我們就來一一來看下:
1.必須至少有一個操作數是用戶定義的類型
這句話看不明白沒有關系,我們只需要記住它的目的就好了。它的主要目的是為了防止用戶為了標準類型重載運算符。比如將+重載成兩個數的差,而不是和。
這種限制對創造性有一定的影響,沒有那么靈活,但可以保證程序的正常運行。不會出現一些反人類的情況
2.不能違反運算符原來的規則
這一點很好理解,比如+號,它的運算就是計算兩個數的和。需要有兩個操作數,現在我們把它重載成一個操作數,就是違法的。
P p; +p;
同樣,我們也不能修改運算符的優先級,如果將加號運算符重載成兩個類相加,那么新的運算符和原來的加號擁有一樣的優先級。
3.不能創建新運算符
這一點之前已經說過了,比如不能定義operator
@等這種原來沒有的運算符。
4.禁止名單
有一些運算符是禁止重載的,如:sizeof, ., ::, ?:, typeid, const_cast, dynamic_cast, reinterpret_cast, static_cast
這些運算符往往都有特殊的功能,直接從實現層面禁止重載。
5.部分運算符只能通過成員函數重載
大多數運算符都可以通過成員函數以及非成員函數進行重載,但也有部分例外,只能通過成員函數重載,
如:
-
=
:賦值運算符 -
()
: 函數調用運算符 -
[]
: 下標運算符 -
->
: 箭頭符號
這里的非成員函數看起來有些費解,之后我們會遇到,主要是指友元函數。
相關推薦
- 2022-10-02 SQL堆疊注入簡介_MsSql
- 2022-07-29 Jetpack?Compose實現列表和動畫效果詳解_Android
- 2022-07-27 Python實現倉庫管理系統_python
- 2022-04-28 淺析python中特殊文件和特殊函數_python
- 2022-05-12 uni-app混合原生安卓開發
- 2022-08-17 python熱力圖實現的完整實例_python
- 2022-11-09 django中的auth模塊與admin后臺管理方法_python
- 2022-12-01 docker?容器網絡模式詳解_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支