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 這樣做對基本資料型別時沒問題的,因為基本資料型別的轉換已經有標準的定義。同樣的操作也...