C 顯式轉換

2022-05-27 08:45:12 字數 724 閱讀 3072

標準c++包含乙個顯式的轉換語法:

--static_cast:用於「良性」和「適度良性」的轉換,包括不用強制轉換

--const_cast:用於「const」和/或「volatile」進行轉換

--reinterpret_cast:轉換為完全不同的意思。為了安全的使用它,關鍵必須轉換回原來的型別。轉換成的型別一般只能用於位操作,否則就是為了其他隱秘的目的。這是所有轉換中最危險的。

--dynamic_cast:用於型別安全的向下轉換

-----常用-----

static_cast:用於所有明確定義的轉換,包括void*的強制轉換、隱式型別轉換、類層次的靜態定位。

1. 資料型別由小到大的轉換,比如int轉換為long或float;

int i ; static_cast(i); static_cast(i);

2. 窄化轉換,即資料型別由大到小的轉換,可能丟失資料;

3. c++中是不允許對乙個void*型別的資料賦值的;

void* ptr;  ptr = static_cast(i);

const_cast:常量轉換,如果從const轉換為非const或從volatile轉換為非volatile,可以使用const_cast。這是const_cast唯一允許的轉換。

volatile int k = 0;   int* u = const_cast(&k);

C 顯式轉換

任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static cast c primer 更為簡單的解釋就是,使用這個型別轉換符,能夠進行比較自然的轉換,類別相近的轉換,而有一些型別差距明顯的轉換則不可以,例如 不能用於不同型別的指標之間轉換 void 除外 不能用於整型與指標之間的...

C 顯式型別轉換

對於型別轉換,我在查資料的時候看到了一種很有意思的解釋,我們可以這樣理解型別轉換 某塊記憶體中的資料是不變的,而型別就是我們戴上的眼鏡,當我們戴上一種眼鏡後,我們就會用對應的型別來解釋記憶體中的資料,這樣不同的解釋就得到了不同的資訊。所謂強制型別轉換實際上就是換上另一副眼鏡後再來看同樣的那塊記憶體資...

c 顯式型別轉換

乙個命名的強制型別轉換具有以下形式 cast name expression 其中,type是轉換的目標型別,而expression是要轉換的值。如果type是引用型別,則結果是左值。cast name是static cast dynamic cast const cast reinterpret ...