網站首頁 編程語言 正文
靜態類型轉換
關鍵字:?static_cast
1,允許內置數據類型之間的轉換
char a = 'a'; double b = static_cast(a); cout << b << endl;//97 return 0;
<>中是轉后的數據類型。()中是要轉的變量名稱。
2,允許子類和父類之間指針或者引用的轉換
向上類型轉換是安全的。(子轉父)
向下類型轉換是不安全的。(父轉子)
指針轉換:
class Animal { }; class Dog :public Animal { }; class Other { }; int main() { Animal* animal = NULL; Dog* dog = NULL; //將animal轉為Dog*(向下類型轉換,不安全) Dog * dog2 = static_cast(animal); Other* other = static_cast (animal);//這個時候就會出錯了,因為兩個指針不是父子關系。 return 0; }
所以,父類和子類的指針可以通過靜態轉換而進行轉換。
引用轉換:
Animal animal; Dog dog; Animal& animalCopy = animal; Dog& dogCopy = static_cast(animalCopy); Dog& dogCopy2 = dog; Animal& animalCopy2 = static_cast(dogCopy2);
在創建了對象以后,創建對象的引用,然后可以將創建的引用轉換為子/父類的引用類型。
動態類型轉換
與靜態類型轉換幾乎一樣,比靜態類型轉換更加安全。(因為在進行向下類型轉換的時候具有類型檢查的功能;如果會丟失精度或信息的情況下就不允許轉換)
關鍵字:dynamic_cast
1,不允許內置數據類型之間的轉換
2,父類和子類之間
(1)允許父子之間指針或者引用的轉換。
(2)有些時候父轉子會出現問題。如果發生了多態,那么轉換總是安全的。多態就是用父類的指針指向子類的對象,且父類中有虛函數,子類重寫父類中的虛函數。
常量轉換
關鍵字:const_cast
該運算符用來修改類型的const屬性(若原先是常量,那么使用后變為非常量;若原先是非常量,那么使用后變成常量)
(1)常量指針被轉化為非常量指針,并且指向原對象。
(2)常量引用被轉換成非常常量引用,并且指向原對象。
注意:此關鍵字只針對指針和引用,不能對其他const屬性進行修改。
//指針: const int* p = NULL; int* pp = const_cast(p); const int* ppp = const_cast (pp); //引用: int num = 10; int& num2 = num; const int& num3 = const_cast (num2);
重新解釋轉換
最不安全的轉換。(可以將int類型轉換為int*類型)
關鍵字:reinterpret_cast
int a = 10; int* p = reinterpret_cast(a);
不同類(毫無關系的類)的指針之間也可以進行轉換。
總結
原文鏈接:https://blog.csdn.net/qq_51399192/article/details/123042288
相關推薦
- 2022-08-02 C#?winform跨線程操作控件的實現_C#教程
- 2022-05-07 以tensorflow庫為例講解Pycharm中如何更新第三方庫_python
- 2022-01-19 webpack5+webpack-dev-server啟動項目熱更新失效/熱更新無效,webpack
- 2023-02-09 Python的Flask項目中獲取請求用戶IP地址?addr問題_python
- 2022-11-05 安裝ingress-nginx遇到的一些坑實戰記錄_云其它
- 2022-05-15 C++設計模式中的觀察者模式一起來看看_C 語言
- 2022-10-15 C語言利用UDP實現群聊聊天室的示例代碼_C 語言
- 2022-07-07 ASP.Net使用System.Security.Principal模擬用戶_實用技巧
- 最近更新
-
- 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同步修改后的遠程分支