網(wǎng)站首頁 編程語言 正文
1 C 強制類型轉換
C 方式的強制類型轉換的用法如下代碼所示:
(Type)(Expression)
- Type:需要轉換成的類型
- Expression:對其進行轉換
e.g.
int v = 0x12345; // 將 int 類型的變量轉換成 char 類型 char c = char(v);
C 方式的強制類型轉換存在如下問題:
過于粗暴:任意類型之間都可以進行轉換,編譯器很難判斷其正確性
typedef void(PF)(int); int v = 0x12345; // 將 0x12345 轉換成一個函數(shù)指針的入口地址 PF* pf = (PF*)v;
上述代碼編譯器是可以編譯通過的,但實際上是不可行的,因此編譯器無法判斷其正確性
- 潛在的問題不易被發(fā)現(xiàn)
- 難于定位:無法快速定位出現(xiàn)錯誤的強制類型轉換語句
2 C++ 強制類型轉轉
C++ 方式的強制類型轉換以 C++ 關鍵字的方式進行轉換,同時將所有轉換類型分為4中類型,如下表所示:
類型 | 特點 |
---|---|
static_cast | 用于基本類型之間的轉換 不能同于基本類型指針間的轉換 可以用于有繼承關系的類對象之間的轉換和類指針之間的轉換 |
const_cast | 用于去除變量的只讀屬性 強制類型轉換的目標類型必須是指針或引用 |
dynamic_cast | 用于有繼承關系的類指針間的轉換 用于有交叉關系的類指針間的轉換 具有類型檢查的功能 需要有虛函數(shù)的支持 |
reinterpret_cast | 用于指針類型之間的轉換 用于整數(shù)和指針類型之間的轉換 |
C++ 方式的強制類型轉換具有如下特點:
- 編譯器能夠幫助檢查潛在的問題
- 可以快速的在代碼中進行定位
- 支持動態(tài)類型識別
e.g. static_cast
void static_cast_Demo() { int i = 0x12345; char c = 'c'; int* pi = &i; char* pc = &c; c = static_cast<char>(i); // ok,可以用于基本類型之間的轉換 pc = static_cast<char*>(pi); // error,不能同于基本類型指針間的轉換 }
e.g. const_cast
void const_cast_Demo() { const int& i = 1; int& j = const_cast<int&>(i); // ok const int x = 2; int& y = const_cast<int&>(x); // ok int z = const_cast<int>(x); // error,強制類型轉換的目標類型必須是指針或引用 j = 5; printf("j = %d\n", j); printf("i = %d\n", i); y = 8; printf("x = %d\n", x); printf("y = %d\n", y); }
原文鏈接:https://blog.csdn.net/weixin_44916154/article/details/124940241
相關推薦
- 2022-04-26 Android?Jetpack?Compose實現(xiàn)列表吸頂效果_Android
- 2024-03-21 【Spring Boot】Spring Boot 配置文件詳解(application.yml、ap
- 2022-05-11 python?DataFrame的shift()方法的使用_python
- 2023-01-20 gazebo里通過節(jié)點發(fā)布topic讓關節(jié)轉動實現(xiàn)詳解_C 語言
- 2022-12-11 C語言執(zhí)行時,程序控制臺輸出窗口?一閃而過問題及解決_C 語言
- 2022-11-01 Flask模板渲染與Get和Post請求詳細介紹_python
- 2022-03-21 C語言動態(tài)內(nèi)存管理介紹_C 語言
- 2022-12-23 Android同步異步任務與多線程及Handler消息處理機制基礎詳細講解_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支