c++ 之 類型轉換


一、隱式類型轉換

int m = 3 + 45.6; //48.6000000000 截斷為48,將小數部分進行截斷

二、C風格 顯式類型轉換(強制類型轉換)

//int k = 5 % 3.2; 編譯器報錯

int k = 5 %(int)3.2; //C語言風格的強制類型轉換,但需要程序員來保證數據正確可轉
int k = 5 % int(3.2); //函數風格的強制類型轉換(C語言風格的強制類型轉換中的一種)
int k = 5 %(int)"dddd"; //C語言風格的強制類型轉換,但結果肯定錯誤
//所以C語言風格的強制類型轉換是一種不安全的類型強制轉換

三、C++類型轉換

//C++出來支持C風格的類型轉換,但提供4中C++的強制類型轉換,分別用於不同的目的

//目的是為了提供豐富的含義和功能,更好的類型檢查機制,方便代碼的書寫與維護
1.static_cast
2.dynamic_cast
3.const_cast
4.reinterpret_cast

這四種強制類型轉換被稱為 "命名的強制類型轉換"
1.static_cast:靜態轉換(可以理解為C風格的強制類型轉換,但編譯器會檢查其合法性)
//通用形式

//強制類型轉換名<type>(express);1.static_cast:靜態轉換(可以理解為C風格的強制類型轉
換,但編譯器會檢查其合法性)
  可用於
    a.相關類型的轉換(如浮點型轉整型)
    int i = static_cast<int> 100.0;
b.子類轉換為父類(繼承關系)
c.void *指針與其他指針之間的轉換(被強制轉換的是void *類型指針)
  不可用於
   a.一般不能用於不同類型指針之間的轉換
2.dynamic_cast:主要應用於 運行時類型識別與檢查。
主要用來父類型和子類型之間的轉換用(將父類型指針指向子類型對象)

3.const_cast:去除指針或引用的const屬性(編譯時進行類型轉換)不能進行不同類型之間的轉換
 
         
4.reinterpret_cast:重新解釋(處理無關類型的轉換)可以亂轉,安全性較差
  常用於如下兩種類型的轉換
a.將整型轉換為指針
b.將一種類型的指針轉換為另一種類型的指針。
c.指針轉換為整型

四、總結

1.強制類型轉換均不建議使用,會抑制編譯器報錯

2. reinterpret_cast非常危險,const_cast使用則意味着設計缺陷

3. 如果實在需要進行強制類型轉換,則要使用C++風格的強制類型轉換

4. reinterpret_cast只要合乎規則的使用,則很好用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM