C++超詳細(xì)講解強(qiáng)制類型轉(zhuǎn)換
1 C 強(qiáng)制類型轉(zhuǎn)換
C 方式的強(qiáng)制類型轉(zhuǎn)換的用法如下代碼所示:
(Type)(Expression)
- Type:需要轉(zhuǎn)換成的類型
- Expression:對(duì)其進(jìn)行轉(zhuǎn)換
e.g.
int v = 0x12345; // 將 int 類型的變量轉(zhuǎn)換成 char 類型 char c = char(v);
C 方式的強(qiáng)制類型轉(zhuǎn)換存在如下問(wèn)題:
過(guò)于粗暴:任意類型之間都可以進(jìn)行轉(zhuǎn)換,編譯器很難判斷其正確性
typedef void(PF)(int); int v = 0x12345; // 將 0x12345 轉(zhuǎn)換成一個(gè)函數(shù)指針的入口地址 PF* pf = (PF*)v;
上述代碼編譯器是可以編譯通過(guò)的,但實(shí)際上是不可行的,因此編譯器無(wú)法判斷其正確性
- 潛在的問(wèn)題不易被發(fā)現(xiàn)
- 難于定位:無(wú)法快速定位出現(xiàn)錯(cuò)誤的強(qiáng)制類型轉(zhuǎn)換語(yǔ)句
2 C++ 強(qiáng)制類型轉(zhuǎn)轉(zhuǎn)
C++ 方式的強(qiáng)制類型轉(zhuǎn)換以 C++ 關(guān)鍵字的方式進(jìn)行轉(zhuǎn)換,同時(shí)將所有轉(zhuǎn)換類型分為4中類型,如下表所示:
類型 | 特點(diǎn) |
---|---|
static_cast | 用于基本類型之間的轉(zhuǎn)換 不能同于基本類型指針間的轉(zhuǎn)換 可以用于有繼承關(guān)系的類對(duì)象之間的轉(zhuǎn)換和類指針之間的轉(zhuǎn)換 |
const_cast | 用于去除變量的只讀屬性 強(qiáng)制類型轉(zhuǎn)換的目標(biāo)類型必須是指針或引用 |
dynamic_cast | 用于有繼承關(guān)系的類指針間的轉(zhuǎn)換 用于有交叉關(guān)系的類指針間的轉(zhuǎn)換 具有類型檢查的功能 需要有虛函數(shù)的支持 |
reinterpret_cast | 用于指針類型之間的轉(zhuǎn)換 用于整數(shù)和指針類型之間的轉(zhuǎn)換 |
C++ 方式的強(qiáng)制類型轉(zhuǎn)換具有如下特點(diǎn):
- 編譯器能夠幫助檢查潛在的問(wèn)題
- 可以快速的在代碼中進(jìn)行定位
- 支持動(dòng)態(tài)類型識(shí)別
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,可以用于基本類型之間的轉(zhuǎn)換 pc = static_cast<char*>(pi); // error,不能同于基本類型指針間的轉(zhuǎn)換 }
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,強(qiáng)制類型轉(zhuǎn)換的目標(biāo)類型必須是指針或引用 j = 5; printf("j = %d\n", j); printf("i = %d\n", i); y = 8; printf("x = %d\n", x); printf("y = %d\n", y); }
到此這篇關(guān)于C++超詳細(xì)講解強(qiáng)制類型轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)C++強(qiáng)制類型轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C++中的強(qiáng)制類型轉(zhuǎn)換操作詳解
- C++超詳細(xì)講解強(qiáng)制類型轉(zhuǎn)換的用法
- C++強(qiáng)制類型轉(zhuǎn)換的四種方式
- C++ 強(qiáng)制類型轉(zhuǎn)換詳解
- C++中4種強(qiáng)制類型轉(zhuǎn)換的區(qū)別詳析
- 關(guān)于C++的強(qiáng)制類型轉(zhuǎn)換淺析
- C++中4種強(qiáng)制類型轉(zhuǎn)換的區(qū)別總結(jié)
- 深入C++四種強(qiáng)制類型轉(zhuǎn)換的總結(jié)
- C++類的自動(dòng)轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換的實(shí)現(xiàn)示例
相關(guān)文章
基于C++實(shí)現(xiàn)去除字符串頭尾指定字符功能
編程時(shí)我們經(jīng)常需要對(duì)字符串進(jìn)行操作,其中有一項(xiàng)操作就是去除字符串的頭(尾)指定的字符,比如空格。本文為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)這一效果,需要的可以參考一下2022-04-04C++使用opencv調(diào)用級(jí)聯(lián)分類器來(lái)識(shí)別目標(biāo)物體的詳細(xì)流程
所謂級(jí)聯(lián)分類器其實(shí)就是把分類器按照一定的順序聯(lián)合到一起,下面這篇文章主要給大家介紹了關(guān)于C++使用opencv調(diào)用級(jí)聯(lián)分類器來(lái)識(shí)別目標(biāo)物體的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05Qt連接MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn)(保姆級(jí)成功版教程)
本文主要介紹了Qt連接MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06怎么用C++提取任意一張圖片的特征(從內(nèi)存讀取數(shù)據(jù))
這篇文章主要介紹了用C++提取任意一張圖片的特征(從內(nèi)存讀取數(shù)據(jù))的相關(guān)資料,需要的朋友可以參考下2017-05-05用C語(yǔ)言來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的虛擬機(jī)
這篇文章主要介紹了用C語(yǔ)言來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的虛擬機(jī),其中棧數(shù)組的部分非常值得學(xué)習(xí),需要的朋友可以參考下2015-07-07C++分析類的對(duì)象作類成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員
終于到了對(duì)象的初始化和清理的最后階段了,在這里分享一個(gè)cpp里有多個(gè)類時(shí),一個(gè)類的對(duì)象作為另一個(gè)類成員的時(shí)候構(gòu)造函數(shù)和析構(gòu)函數(shù)調(diào)用的時(shí)機(jī)。還有一個(gè)靜態(tài)成員也是經(jīng)??嫉降狞c(diǎn),在這篇博客將會(huì)詳解其概念并舉出案例鞏固,讓我們開始2022-05-05C語(yǔ)言中使用qsort函數(shù)對(duì)自定義結(jié)構(gòu)體數(shù)組進(jìn)行排序
這篇文章主要介紹了C語(yǔ)言中使用qsort函數(shù)對(duì)自定義結(jié)構(gòu)體數(shù)組進(jìn)行排序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11