c++有四種型別轉換的方式
用於去掉const,volatile和_unaligned屬性
說到了const 在這裡提一下
const
簡單理解:const的目的就是定義乙個「不會被修改的常量」,可以修飾變數,指標,引用,函式引數等等
使用const可以減少**出錯的概率,
int
main()
;const t a;
= 100;
t& b =
const_cast
>
(a);
b.i =
100;
cout << a.i << endl;
return0;
}
我們把上述**放入編譯器內 會發現 **a.i=100;**這句報錯
因為const關鍵字的緣故
但是通過const_cast關鍵字就可以使其賦值
然後我們看下結果
static_cast類似於c語言中的強制轉換 進行無條件轉換,靜態型別轉換
1.基類和子類之間的轉換,子類指標轉換為父類指標是安全的,但是父類指標轉換為子類指標是不安全的
2.static_cast可以轉換基本資料型別如:int char float enum struct 不能轉換無關型別比如非基類和子類的轉換
3.把任何型別的表示式轉換成void型別
4.static_cast 不能去掉型別的const volatile型別(用const_cast)
static_cast不提供執行時檢查 所以在編寫的時候要確認安全性
int
main()
相比static_cast來說,dynamic_cast在轉換之前會檢測型別轉換是否合法,具有一定安全性 同時額外消耗一些效能有條件的轉換,動態型別的轉換,執行的時候檢查型別安全**換失敗返回null)
1.安全的基類和子類之間的轉換
2.必須帶有虛函式
3.相同基類,不同子類之間的交叉轉換,但是結果必須返回null
class
base
;//虛函式時必須的 保證多型特性才能使用};
class
sub:
public base ;}
;int
main()
注意上邊定義了乙個虛函式,只有存在虛函式才能保證多型性僅僅重新解釋型別,但沒有進行二進位制的轉換
1.轉換的型別必須是乙個指標,引用,算術型別,函式指標或者是成員指標
2.在比特級上的轉換,可以把乙個指標轉換成乙個正數,也可以把乙個整數轉換成乙個指標
3.最普通的用途就是函式指標型別之間進行轉換
4.很難保證移植性
他可以轉換任何內建的資料型別為其他任何的資料型別
也可以轉化任何指標型別為其他型別,甚至可以轉換內建資料型別為指標
非常激進的型別轉換,在編譯期完成,可以轉換任何型別的指標,極不安全,非極端情況不要使用
去const屬性用const_cast
基本型別轉換用static_cast
多型類之間型別轉換用dynamic_cast
不同型別的指標型別轉換用 reinterpret_cast
希望我所寫的對大家有幫助
c 四種型別轉換
c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a。c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...
C 四種型別轉換
include include includeusing namespace std static cast 用法 static cast type id expression 該運算子把expression轉換為type id型別,但沒有執行時型別檢查來保證轉換的安全性。它主要有如下幾種用法 用於...
C 四種型別轉換
1 static cast 1.上行轉換,把派生類的指標或引用轉換成基類,此時是安全的 2.下行轉換,把基類的指標或者引用轉換成派生類,因為沒有動態監測,所以是不安全的 3.顯示型別轉換,如int轉float等 4.任意型別空指標轉任意型別空指標 5.任意型別表示式轉為void型別 如下 int a...