




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C++簡明講解類型轉(zhuǎn)換的使用與作用目錄一、C語言中的強(qiáng)制類型轉(zhuǎn)換二、C語言強(qiáng)制類型轉(zhuǎn)換存在的問題三、C++中的類型轉(zhuǎn)換四、小結(jié)
一、C語言中的強(qiáng)制類型轉(zhuǎn)換
轉(zhuǎn)換的語法如下:
(Type)(Expression)
Type(Expression)
下面看一段C語言中粗暴的類型轉(zhuǎn)換的代碼:
#includestdio.h
typedefvoid(PF)(int);
structPoint
intx;
inty;
intmain()
intv=0x12345;
PF*pf=(PF*)v;
charc=char(v);
Point*p=(Point*)v;
pf(5);
printf("p-x=%d\n",p-
printf("p-y=%d\n",p-
return0;
}
在C++的環(huán)境下編譯后就會發(fā)現(xiàn):
二、C語言強(qiáng)制類型轉(zhuǎn)換存在的問題
過于粗暴
任意類型之間都可以進(jìn)行轉(zhuǎn)換,編譯器很難判斷其正確性
難于定位
在源碼中無法快速定位所有使用強(qiáng)制類型轉(zhuǎn)換的語句
三、C++中的類型轉(zhuǎn)換
C++將強(qiáng)制類型轉(zhuǎn)換分為4種不同的類型:
C++強(qiáng)制類型轉(zhuǎn)換
static_castconst_castdynamic_castreinterpret_cast
用法:xxx_castType(Expression)
static_cast強(qiáng)制類型轉(zhuǎn)換
用于基本類型間的轉(zhuǎn)換不能用于基本類型指針間的轉(zhuǎn)換用于有繼承關(guān)系類對象之間的轉(zhuǎn)換和類指針之間的轉(zhuǎn)換
const_cast強(qiáng)制類型轉(zhuǎn)換
用于去除變量的只讀屬性強(qiáng)制轉(zhuǎn)換的目標(biāo)類型必須是指針或引用
reinterpret_cast強(qiáng)制類型轉(zhuǎn)換
用于指針類型間的強(qiáng)制轉(zhuǎn)換用于整數(shù)和指針類型間的強(qiáng)制轉(zhuǎn)換
dynamic_cast強(qiáng)制類型轉(zhuǎn)換
用于有繼承關(guān)系的類指針間的轉(zhuǎn)換用于有交叉關(guān)系的類指針間的轉(zhuǎn)換具有類型檢查的功能需要虛函數(shù)的支持
??????下面看一段C++類型轉(zhuǎn)換代碼:
#includestdio.h
voidstatic_cast_demo()
inti=0x12345;
charc='c';
int*pi=
char*pc=
c=static_castchar
//pc=static_castchar*(pi);
voidconst_cast_demo()
constintj=1;
intk=const_castint
constintx=2;
inty=const_castint
//intz=const_castint
k=5;
printf("k=%d\n",k);
printf("j=%d\n",j);
y=8;
printf("x=%d\n",x);
printf("y=%d\n",y);
printf("x=%p\n",
printf("y=%p\n",
voidreinterpret_cast_demo()
inti=0;
charc='c';
int*pi=
char*pc=
pc=reinterpret_castchar*(pi);
pi=reinterpret_castint*(pc);
pi=reinterpret_castint*
//c=reinterpret_castchar
voiddynamic_cast_demo()
inti=0;
int*pi=
//char*pc=dynamic_castchar*(pi);
intmain()
static_cast_demo();
const_cast_demo();
reinterpret_cast_demo();
dynamic_cast_demo();
return0;
}
下面為輸出結(jié)果:
注意程序注釋的4個(gè)地方,都是錯(cuò)誤使用了類型轉(zhuǎn)換:
第一個(gè)地方:pc=static_castchar*(pi)。錯(cuò)誤在于static_cast不能在基本類型指針之間相互轉(zhuǎn)換。
第二個(gè)地方:intz=const_castint(x)。錯(cuò)誤在于const_cast強(qiáng)制轉(zhuǎn)換的目標(biāo)類型必須是指針或引用。
第三個(gè)地方:c=reinterpret_castchar(i)。錯(cuò)誤在于const_cast用于指針類型間的強(qiáng)制轉(zhuǎn)換,而不能用于基本類型。
第四個(gè)地方:char*pc=dynamic_castchar*(pi)。錯(cuò)誤在于dynamic_cast需要虛函數(shù)的支持。
還有一個(gè)問題就是x和y值的問題。x是一個(gè)真正意義上的常量,所以編譯期間值確定了就是2,但是編譯器要兼容C語言,所以會給x在棧空間分配了4個(gè)字節(jié)的空間出來,使用const_cast作用于它就相當(dāng)于給這4個(gè)字節(jié)空間取了一個(gè)別名y,令y=8,就相當(dāng)于給這4個(gè)字節(jié)棧空間中的int變量賦了一個(gè)值8。所以打印出來的x和y的地址值是一樣
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 標(biāo)簽感知嵌入與表征學(xué)習(xí)
- 畢業(yè)實(shí)習(xí)教育總結(jié)(30篇)
- 專業(yè)車輛碰撞責(zé)任界定與賠償協(xié)議
- 場地環(huán)境風(fēng)險(xiǎn)評估合同
- 民間借貸財(cái)產(chǎn)保全法律文書定制服務(wù)協(xié)議
- 2025年中考考前最后一卷化學(xué)(深圳卷)(全解全析)
- 鄉(xiāng)鎮(zhèn)宗教活動方案
- 吉林醫(yī)藥宿舍管理制度
- 學(xué)校節(jié)日活動管理制度
- 公司高管用車管理制度
- 某市道路客運(yùn)班線管理臺賬
- DB37-T 1854-2020 山東省化工裝置安全試車工作規(guī)范-(高清版)
- 消防檔案范本(企業(yè)類)
- 消防安全管理評分表
- 國際足聯(lián)球員經(jīng)紀(jì)人規(guī)則
- 電梯更換鋼絲繩施工方案
- 植物保護(hù)學(xué)考試復(fù)習(xí)資料
- 科學(xué)二年級第二學(xué)期雙減期末綜合測評方案
- 6.醫(yī)院感染綜合性監(jiān)測制度
- 貫徹三標(biāo)一規(guī)范咨詢工作計(jì)劃
- 定語從句語法講解
評論
0/150
提交評論