1首先來回顧
c的強制轉換
大家都知道,在編譯
c語言中的強制轉換時
,編譯器不會檢查轉換是否成功
,都會編譯正確
.比如:
#include "輸出結果如下圖所示:stdio.h
"struct
position
;int
main()
從上圖可以看到,只有當執行**時
,才會出現段錯誤問題
.當c**上千行時
,若出現這種問題
,是非常難找的
.2.c++的新型型別轉換
所以在c++中
,便引入了4種強制型別轉換
2.1 static_cast(靜態型別轉換
)示例-基本資料:
int i = 0x45示例-基本資料與物件轉換:;
char c = 'c'
; c = static_cast(i);
//char* pc = static_cast(&i);
//此行錯誤,不能用於基本指標之間轉換
class示例-有繼承關係的類物件指標轉換:test
}; int
main()
class執行列印:parent
};
class child : public
parent };
intmain()
parent:32.2const_cast(去常型別轉換)示例:mval:
100
const輸出結果:int x =1; //
const:定義乙個常量x
const
int& j =2; //
const引用:定義乙個唯讀變數j
int& p1= const_cast(x); //
強制轉換int &
int *p2 = const_cast(&j); //
強制轉換int*
//int p3 = const_cast(j);
//此行錯誤,不能轉換普通資料型
p1=3
;*p2=4
;printf(
"x=%d, j=%d\n
",x,j);
printf(
"p1=%d *p2=%d\n
",p1,*p2);
x=1 j=4從輸出結果p1=3 *p2=4
,可以看出修改
p1,p2,只有j
內容變換了
,是因為變數j用
const
引用定義的
,所以是個唯讀變數.
2.3 dynamic_cast(動態型別轉換
) -當轉換為指標時:
-當轉換為引用時:
示例-通過子類指標去指向父類:
#include using示例-通過多重繼承下的類指標轉換:namespace
std;
class
base
virtual ~base()
};class derived : public
base
;int
main()
class2.4 reinterpret_ cast(解讀型別轉換) (解讀是指basea
}; class
baseb
}; class derived : public basea,public
baseb
;int
main()
:對要轉換的資料進行重新的解讀
)例如:
int i = 0;
char j='c'
;int *p1=reinterpret_cast(&i);
char *p2=reinterpret_cast(&j);
//int p3=reinterpret_casti;
//此行錯誤,不能轉換普通資料型
5 C 基礎 C 的值型別
1 c 的值型別 有幾個特點 值型別分為兩類 struct 結構 enum 列舉 struct 結構 分為以下幾類 bool 使用者定義的結構。下表列出了 c 中內建型別中可用的值型別 型別描述 範圍預設值 bool 布林值true 或 false false byte 8 位無符號整數 0 到 2...
C 的4種強制型別轉換
首先看一下c語言下的型別轉換 將浮點型別值賦給整型變數時,捨棄其小數部分 將整型值賦給浮點型變數,值不變,但是以指數形式儲存 將double型別賦值給float型別變數時,注意數值溢位 字元型賦值給整型,則存入的是字元的ascll碼 將乙個int short long型別的值賦給char型別變數,只...
C 11 新型的型別轉換
include typedef void pf int struct point int main 輸出 無警告,無錯誤 段錯誤c 方式強制型別轉換存在的問題 問題 強制型別轉換在實際工程中是很完全難避免的!如何進行更加安全可靠的轉換呢?static cast const cast dynamic ...