標準c++為了加強型別轉換的可視性,引入了四種命名的強制型別轉換操作符:static_cast、reinterpret_cast、const_cast、dynamic_cast
static_cast用於非多型型別的轉換(靜態轉換),編譯器隱式執行的任何型別轉換都可用static_cast,但它不能用於兩個不相關的型別進行轉換
int a =10;
double b =
static_cast
<
double
>
(a);
// 相關型別、相近型別(意義類似的型別)之間的轉換
reinterpret_cast操作符通常為運算元的位模式提供較低層次的重新解釋,用於將一種型別轉換為另一種不同的型別(不相關型別之間的轉換)
int c =10;
int* pc =
&c;int path =
reinterpret_cast
<
int>
(pc)
;// 不相關型別之間的轉換
const_cast最常用的用途就是刪除變數的const屬性,方便賦值
const
int d =2;
int* pd =
const_cast
<
int*
>
(&d)
;// 去掉const屬性的轉換
*pd =
3;
dynamic_cast用於將乙個父類物件的指標/引用轉換為子類物件的指標或引用(動態轉換)
向上轉型:子類物件指標/引用->父類指標/引用(不需要轉換,賦值相容規則) 向下轉型:父類物件指標/引用->子類指標/引用(用dynamic_cast轉型是安全的)
classa}
;classb:
public a
;int
main()
C C 中的型別轉換
從c轉向c 時,型別轉換出現了一些疑惑,查閱了一些資料和博文,整理如下。1.隱式型別轉換 這類轉換主要發生在型別不同的賦值和計算過程中,c c 中均存在 int ival 3 double dval 3.124 ival dval ival被提公升為double型別int p 0 0被轉換為了int...
C C 的型別轉換
c語言的型別轉換分為隱式型別的轉換和強制型別的轉換。隱式型別轉換 適用於相近型別的轉換 int main return 0 int main 因為c語言的隱式型別轉換坑很大,標準c 為了加強型別轉換的可視性,引入了四種命名的強制型別轉換操作符 static cast 相近型別的轉換 static c...
C C 型別轉換
include include using namespace std int main 程式的執行結果如下 註解 int a 相當於將浮點數a的位址的前sizeof int 個位元組當成int型的資料輸出。float a 1.0f在記憶體中的表示是0x3f800000,當 int a強制轉換時,會...