從c轉向c++時,型別轉換出現了一些疑惑,查閱了一些資料和博文,整理如下。
1. 隱式型別轉換
這類轉換主要發生在型別不同的賦值和計算過程中,c/c++中均存在
int ival = 3;
double dval = 3.124;
ival + dval //ival被提公升為double型別
int
*p = 0; //
0被轉換為了int* 型別
ival = dval; // dval被轉換為了int型別
還有很多類似的例子,比如傳入函式的實參時,實參和形參型別不一致,實參轉換為形參型別;函式返回值和return表示式型別不一致,轉換為返回值等等
2. 顯示型別轉換
也被稱為強制轉換,顧名思義就是表示式中表明了如何轉換。
c++風格:static_cast, dynamic_cast, reinterpret_cast, const_cast
下面對c++中幾個轉換型別做一些說明
static_cast
dynamic_cast
const_cast
使用const_cast機會非常少,如果寫**需要用到const_cast,很大程度上說明**設計有問題!
reinterpret_cast
總結來說:
C C 中的型別轉換
標準c 為了加強型別轉換的可視性,引入了四種命名的強制型別轉換操作符 static cast reinterpret cast const cast dynamic cast static cast用於非多型型別的轉換 靜態轉換 編譯器隱式執行的任何型別轉換都可用static cast,但它不能用於...
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強制轉換時,會...