C++ xxx_cast實現轉換程式碼例項解析
阿新 • • 發佈:2020-07-24
1.1 static_cast
static_cast可以在一個方向上實現隱式轉換,在另一個方向上實現靜態轉換。其適用於單隱和雙隱兩種情況。
雙隱
雙隱即兩邊都可以直接進行隱式轉換,適用於一般型別的資料轉換(如int,float,double,long等資料型別之間的轉換)
單隱
單隱即只能在一個方向上進行隱式轉換,在另一個方向上只能實現靜態轉換。(如void* 和指標之間的轉換,任意型別的指標可以轉換為void*,但是void*不能轉換為任意型別的指標,因此將void*轉換為任意型別的指標時就需要呼叫靜態轉換)
//首先要驗證的是static_cast,其可以實現在一個方向上做隱式轉換,另一個方向上做靜態轉換,可以適用於單隱和雙隱兩種情況 //首先是雙隱,也就是兩邊都能直接進行隱式轉換,一般適用於基本資料型別,如 int a = 4; double b = 3.2; a = b; b = a; cout << a << endl; cout << b << endl; a = static_cast<int> (b); b = static_cast<double> (a); //然後是單隱,也就是說,只能從一遍到另一邊進行隱式轉換 //任意型別的指標可以轉換為void*,但是void*不能轉換為任意型別的指標 void* p = &b; int* q = &a; p = q; q = static_cast<int*>(p);
1.2 reinterpret_cast
reinterpret_cast“通常為運算元的位模式提供較底層的重新解釋”-->也就是說將資料以二進位制的形式重新解釋,在雙方向上都不可以隱式型別轉換的,則需要重新型別轉換。可以實現雙不隱的情況,如int轉指標,指標轉int等。
//雙不隱 int *m=&a; int n=4; m = reinterpret_cast<int*>(n); n = reinterpret_cast<int>(m);
1.3 const_cast
Const_cast可用來移除非const物件的引用或指標的常量性。其可以將const變數轉換為非const變數。其可以用於去除指標和引用的const,const_cast是對const的語義補充。其目標型別只能是引用或指標。
非const物件 --> const引用或指標 --> 脫const --> 修改非const物件
//const_cast-->用於去除非const物件的const,用於指標和引用 /************ 第一種情況,去引用的const化 ************/ int aa; const int& ra = aa; aa = 100; cout << aa << endl; cout << ra << endl; //ra = 200;//這樣是錯誤的,因為ra是const,要實現ra的修改,必須去const化 const_cast<int&> (ra) = 300; cout << aa << endl; cout << ra << endl; /************ 第二種情況,去指標的const化 ************/ const int* pp = &a; //*p = 200;//這樣是錯誤的,因為指標p是const型別,要實現p的修改,必須去const化 *const_cast<int*>(pp) = 500; cout << *pp << endl;
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。