C Primer顯示型別轉換

2021-08-20 13:35:58 字數 910 閱讀 4772

乙個命名的強制型別轉換形式:cast_name(expression);(type是轉換型別,如果是引用型別,返回左值,即位址物件)

cast_name:

1.static_cast

不包含底層const(底層const:指標指向的物件是常量)的任何具有明確定義的型別轉換。用處:

1.將較大的算術型別轉換給較小的型別時

double slope = static_cast(j) / i;
2.找回存放在void *指標中的值。例:

void *p = &d;

double *dp = static_cast(p);

2.dynamic_cast

3.const_cast

只能改變const屬性,只能改變運算物件的底層const。只有const_cast可以改變表示式的常量屬性,可對非常量的物件進行獲取寫許可權,常用於有函式過載的上下文中。

const char *cp;

char *p = static_cast(cp);         //錯誤:static_cast不能轉換掉const性質

static_cast(cp); //正確:字串字面值轉換成string型別

const_cast(cp); //錯誤:const_cast只改變常量屬性

4.reinterpret_cast

為運算物件的位模式提供較低層次上的重新解釋。本質上依賴機器,安全使用需對涉及的型別和編譯器實現轉換過程都非常了解。

int *ip;

char *cp = reinterpret_cast(ip);        //等價char *cp = (char *)ip;

C Primer 4 11節型別轉換 顯示轉換

1 顯示轉換 將物件顯示地強制轉換成另一種型別。2 命名的強制型別轉換 形式 cast name type expression cast name可以是static cast dynamic cast const cats reinterpret cast。type 是要轉換成的型別 expres...

強制型別轉換 (c primer)

命名的強制型別轉換符號的一般形式如下 cast name expression 其中 cast name 為 static cast dynamic cast const cast 和reinterpret cast 之一,type 為轉換的目標型別,而 expression 則是被強制轉換的值。強...

顯示型別轉換

static cast 目標型別 源型別物件 編譯器對源型別和目標型別做相容性檢查,檢查不通過報錯 源型別和目標型別只要在乙個方向上可以做隱式型別轉換,那麼在兩個方向上就都可以做靜態型別轉換 如果將目標型別從源型別的型別轉換建構函式,或者源型別向目標型別的型別轉換運算子函式,被宣告為explicit...