C++ xxx_cast實現(xiàn)轉(zhuǎn)換代碼實例解析
1.1 static_cast
static_cast可以在一個方向上實現(xiàn)隱式轉(zhuǎn)換,在另一個方向上實現(xiàn)靜態(tài)轉(zhuǎn)換。其適用于單隱和雙隱兩種情況。
雙隱
雙隱即兩邊都可以直接進行隱式轉(zhuǎn)換,適用于一般類型的數(shù)據(jù)轉(zhuǎn)換(如int, float, double, long等數(shù)據(jù)類型之間的轉(zhuǎn)換)
單隱
單隱即只能在一個方向上進行隱式轉(zhuǎn)換,在另一個方向上只能實現(xiàn)靜態(tài)轉(zhuǎn)換。(如void* 和指針之間的轉(zhuǎn)換,任意類型的指針可以轉(zhuǎn)換為void*,但是void*不能轉(zhuǎn)換為任意類型的指針,因此將void*轉(zhuǎn)換為任意類型的指針時就需要調(diào)用靜態(tài)轉(zhuǎn)換)
//首先要驗證的是static_cast,其可以實現(xiàn)在一個方向上做隱式轉(zhuǎn)換,另一個方向上做靜態(tài)轉(zhuǎn)換,可以適用于單隱和雙隱兩種情況 //首先是雙隱,也就是兩邊都能直接進行隱式轉(zhuǎn)換,一般適用于基本數(shù)據(jù)類型,如 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); //然后是單隱,也就是說,只能從一遍到另一邊進行隱式轉(zhuǎn)換 //任意類型的指針可以轉(zhuǎn)換為void*,但是void*不能轉(zhuǎn)換為任意類型的指針 void* p = &b; int* q = &a; p = q; q = static_cast<int*>(p);
1.2 reinterpret_cast
reinterpret_cast“通常為操作數(shù)的位模式提供較底層的重新解釋”-->也就是說將數(shù)據(jù)以二進制的形式重新解釋,在雙方向上都不可以隱式類型轉(zhuǎn)換的,則需要重新類型轉(zhuǎn)換??梢詫崿F(xiàn)雙不隱的情況,如int轉(zhuǎn)指針,指針轉(zhuǎn)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變量轉(zhuǎn)換為非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,要實現(xiàn)ra的修改,必須去const化 const_cast<int&> (ra) = 300; cout << aa << endl; cout << ra << endl; /************ 第二種情況,去指針的const化 ************/ const int* pp = &a; //*p = 200;//這樣是錯誤的,因為指針p是const類型,要實現(xiàn)p的修改,必須去const化 *const_cast<int*>(pp) = 500; cout << *pp << endl;
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言實現(xiàn)日期和時間處理的常用函數(shù)總結(jié)
在C語言中,時間和日期處理是一項非?;A(chǔ)的技能,也是開發(fā)實際應(yīng)用程序時經(jīng)常會用到的功能,本文為大家總結(jié)了C語言中一些常用的時間庫函數(shù),希望對大家有所幫助2023-06-06c語言獲取當前工作路徑的實現(xiàn)代碼(windows/linux)
這篇文章主要介紹了c語言獲取當前工作路徑的實現(xiàn)代碼(windows/linux),需要的朋友可以參考下2017-09-09C++中靜態(tài)初始化數(shù)組與動態(tài)初始化數(shù)組詳解
今天小編就為大家分享一篇C++中靜態(tài)初始化數(shù)組與動態(tài)初始化數(shù)組詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07C++的get()函數(shù)與getline()函數(shù)使用詳解
這篇文章主要介紹了C++的get()函數(shù)與getline()函數(shù)使用詳解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09