C 中的四類強制轉換?

2021-08-04 04:46:04 字數 910 閱讀 2454

c++中的四類強制轉換?

例:class classa

virtual void functiona()

};class classb

};class classc: public classa, public classb

;classc aobject;

classa *pa = &aobject;

classb *pb = &aobject;

classc *pc = &aobject;

假設定義了classa* pa2,

下面正確的**是:bd

a:pa2=static_cast(pb);

b:void* pvoid=static_cast(pb);      pa2=static_cast(pvoid);

c:pa2=pb;

d:pa2=static_cast(static_cast(pb));

解析1:

a   兩個無關型別指標之間的轉換 是不合法的

b  通過void*這個媒介 ,合法

c  直接賦值,無法進行隱式轉換,不合法

d  通過繼承體系中的乙個 做媒介, 上行 下行 合法

解析2:

static_cast(編譯器可實現的隱式轉換或類層次間的下行轉換)、

dynamic_cast(運算元只能為類指標或類引用)、

const_cast(去除const)、

reinterpret_const(一般意義強制轉換)

經測試,bd選項都可以通過編譯,然而b選項明顯不安全。 

如果想安全的將classb的指標轉換到classa的指標,需要將pb的值向前調整sizeof(classa)個大小。 

d選項可以做的。但b選項通過void直接把pb的值賦值給了pa2,並未進行位置調整,所以說是不安全的。

四 型別轉換

型別之間的轉換 c 語言中的資料型別可以進行轉換 強制型別轉換 強制型別轉換的語法 type var name type value 強制型別轉換的結果 目標型別能夠容納目標值 結果不變 目標型別不能容納目標值 結果將產生截斷 注意 不是所有的強制型別轉換都能成功,當不能進行強制型別轉換時,編譯器將...

複習C 小結(四) 類

我們知道,this指標的預設型別是指向類型別非常常量版本的指標常量。這樣就會帶來乙個問題,我們不能夠把this指標繫結當乙個常量物件上 因為底層const等級不同 比如下面這個例子。class solution int main 此時,我們可以用const關鍵字將getisbn 宣告為常量成員函式,...

C 高階篇(四) 型別轉換高階

目前為止,我們一直使用傳統的型別轉換符來進行簡單物件的型別轉換。例如,要把乙個double型別的浮點型數字轉換為int 的整型數字,我們是這樣做的 int i double d i int d 或者 i int d 這樣做對基本資料型別時沒問題的,因為基本資料型別的轉換已經有標準的定義。同樣的操作也...