c++之四種型別轉換加粗樣式****
c++是一種強型別的語言,在實際編碼過程中,經常需要用到型別轉換。
在資料型別轉換過程中,c++對c相容,使用顯式或者隱式轉換,顯式是直接用小括號強制轉換,type a = (type)b,隱式是直接 float b = 0.5; int a = b; 這樣隱式截斷這樣隱式的截斷是向 0 取整。
除對c相容外,還有四個強制型別轉換關鍵字:
const_cast,static_cast,dynamic_cast、reinterpret_cast
const_cast
在c語言中,const通常用來限定該變數的值不能被修改。
而const_cast用於強制去掉這種不能被修改特性(const或volatile屬性),但需要特別注意的是const_cast不是用於去除變數的常量性,而是只能去除指向物件的指標或引用的常量性,其去除常量性的物件必須為指標或引用。
用法為:const_cast《型別說明符》 (常量或引用)
1、該運算子用來修改型別的const或volatile屬性。
2、常量指標被轉化成非常量指標,並且仍然指向原來的物件。
3、常量引用被轉換成非常量引用,並且仍指向原來的物件,常量物件被轉換成非常量物件。
例:#include
using namespace std;
int main()
static_cast
static_cast是四種中是最常見的.
用法為:static_cast 《型別說明符》 (變數或表示式)
1、c++中內建基本資料型別之間的轉換,如把int轉換成char,這種轉換的安全性也要開發人員來保證。
2、類層次結構中基類和派生類之間指標或引用的轉換。進行上行轉換(將派生類的指標或引用轉換成基類表示)是安全的;
進行下行轉換(將基類指標或引用轉換成派生類表示)時,因沒有動態型別檢查,所以是不安全的。
3、將空指標轉換成目標型別的空指標。
4、將任意型別的表示式轉換成void型別。
*static_cast只能在有相互聯絡的型別中進行相互轉換,不一定包含虛函式。
例:#include
using namespace std;
int main()
{const auto a = 5;
const auto b = 2;
auto ret1 = static_cast(float)a;
auto ret2 = static_cast(double)b;
cout <<「ret1 = 」用法:dynamic_cast《型別說明符》 (自定義類、物件、結構體)
*型別說明符不能為基本資料型別。
1、其他三種都是編譯時完成的,dynamic_cast 是執行時處理的,執行時要進行型別檢查。
2、dynamic_cast 要求 <> 內所描述的目標型別必須為指標或引用。dynamic_cast 轉換如果成功的話返回的是指向類的指標或引用,轉換失敗的話則會返回 null。
3、使用 dynamic_cast 進行轉換的,基類中一定要有虛函式,否則編譯不通過。
4、在類的轉換時,在類層次間進行上行轉換(子類指標指向父類指標)時,dynamic_cast 和 static_cast 的效果是一樣的。在進行下行轉換(父類指標轉化為子類指標)時,dynamic_cast 具有型別檢查的功能,比 static_cast 更安全。
向上轉換,即為子類指標指向父類指標(一般不會出問題);向下轉換,即將父類指標轉化子類指標。
向下轉換的成功與否還與將要轉換的型別有關,即要轉換的指標指向的物件的實際型別與轉換以後的物件型別一定要相同,否則轉換失敗。
在c++中,編譯期的型別轉換有可能會在執行時出現錯誤,特別是涉及到類物件的指標或引用操作時,更容易產生錯誤。dynamic_cast操作符則可以在執行期對可能產生問題的型別轉換進行測試。
reinterpret_cast
用法為:reinterpret_cast 《型別說明符》 (expression)。
type-id 必須是乙個指標、引用、算術型別、函式指標或者成員指標。它可以把乙個指標轉換成乙個整數,也可以把乙個整數轉換成乙個指標(先把乙個指標轉換成乙個整數,在把該整數轉換成原型別的指標,還可以得到原先的指標值)。
reinterpret_cast 主要有三種強制轉換用途:
1、改變指標或引用的型別
2、將指標或引用轉換為乙個足夠長度的整形
3、將整型轉換為指標或引用型別。
C 之四種強制型別轉換
const cast 去除指標或者引用的const屬性 轉化常量指標為非常量指標,並且仍指向原來的物件 轉化常用引用為非常量引用,並且人指向原來的物件 一般用於修改指標 static cast 轉換資料型別,類的上下行轉換。轉換資料型別,由於沒有執行時型別檢擦來保證轉換的安全性,不安全 類的上下行轉...
C 四種強制型別轉換
c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...
C 四種強制型別轉換
1 概述 去const屬性用const cast。基本型別轉換用static cast。多型類之間的型別轉換用daynamic cast。不同型別的指標型別轉換用reinterpreter cast。2 詳解加示例 a const cast 用法 const cast 型別 表示式 用途 刪除con...