C++超詳細(xì)講解強制類型轉(zhuǎn)換
1 C 強制類型轉(zhuǎn)換
C 方式的強制類型轉(zhuǎn)換的用法如下代碼所示:
(Type)(Expression)
- Type:需要轉(zhuǎn)換成的類型
- Expression:對其進(jìn)行轉(zhuǎn)換
e.g.
int v = 0x12345; // 將 int 類型的變量轉(zhuǎn)換成 char 類型 char c = char(v);
C 方式的強制類型轉(zhuǎn)換存在如下問題:
過于粗暴:任意類型之間都可以進(jìn)行轉(zhuǎn)換,編譯器很難判斷其正確性
typedef void(PF)(int); int v = 0x12345; // 將 0x12345 轉(zhuǎn)換成一個函數(shù)指針的入口地址 PF* pf = (PF*)v;
上述代碼編譯器是可以編譯通過的,但實際上是不可行的,因此編譯器無法判斷其正確性
- 潛在的問題不易被發(fā)現(xiàn)
- 難于定位:無法快速定位出現(xiàn)錯誤的強制類型轉(zhuǎn)換語句
2 C++ 強制類型轉(zhuǎn)轉(zhuǎn)
C++ 方式的強制類型轉(zhuǎn)換以 C++ 關(guān)鍵字的方式進(jìn)行轉(zhuǎn)換,同時將所有轉(zhuǎn)換類型分為4中類型,如下表所示:
| 類型 | 特點 |
|---|---|
| static_cast | 用于基本類型之間的轉(zhuǎn)換 不能同于基本類型指針間的轉(zhuǎn)換 可以用于有繼承關(guān)系的類對象之間的轉(zhuǎn)換和類指針之間的轉(zhuǎn)換 |
| const_cast | 用于去除變量的只讀屬性 強制類型轉(zhuǎn)換的目標(biāo)類型必須是指針或引用 |
| dynamic_cast | 用于有繼承關(guān)系的類指針間的轉(zhuǎn)換 用于有交叉關(guān)系的類指針間的轉(zhuǎn)換 具有類型檢查的功能 需要有虛函數(shù)的支持 |
| reinterpret_cast | 用于指針類型之間的轉(zhuǎn)換 用于整數(shù)和指針類型之間的轉(zhuǎn)換 |
C++ 方式的強制類型轉(zhuǎn)換具有如下特點:
- 編譯器能夠幫助檢查潛在的問題
- 可以快速的在代碼中進(jìn)行定位
- 支持動態(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,可以用于基本類型之間的轉(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,強制類型轉(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ì)講解強制類型轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)C++強制類型轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++?Qt開發(fā)之運用QJSON模塊解析數(shù)據(jù)
JSON(JavaScript?Object?Notation)是一種輕量級的數(shù)據(jù)交換格式,它易于人閱讀和編寫,也易于機器解析和生成,本文主要介紹了Qt如何運用QJson組件的實現(xiàn)對JSON文本的靈活解析功能,需要的可以參考下2024-01-01
如何在Qt中實現(xiàn)關(guān)于Json?的操作
JSON是一種輕量級數(shù)據(jù)交換格式,常用于客戶端和服務(wù)端的數(shù)據(jù)交互,不依賴于編程語言,在很多編程語言中都可以使用JSON,這篇文章主要介紹了在Qt中實現(xiàn)關(guān)于Json的操作,需要的朋友可以參考下2023-08-08
C語言實現(xiàn)文本文件/二進(jìn)制文件格式互換
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)文本文件和二進(jìn)制文件格式互換,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03

