資料型別轉換

2021-10-04 06:21:11 字數 1379 閱讀 8949

c++中的型別轉換分為兩種:隱式型別轉換;

顯式型別轉換;

而對於隱式變換,就是標準的轉換,在很多時候,不經意間就發生了,比如int型別和float型別相加時,int型別就會被隱式的轉換位float型別,然後再進行相加運算。而關於隱式轉換不是今天總結的重點,重點是顯式轉換。在標準c++中有四個型別轉換符:static_cast、dynamic_cast、const_cast和reinterpret_cast;下面將對它們一一的進行總結。

將expression轉換為type-id型別,主要用於非多型型別之間的轉換,不提供執行時的檢查來確保轉換的安全性。主要在以下幾種場合中使用:

1:用於類層次結構中,基類和子類之間指標和引用的轉換;

當進行上行轉換,也就是把子類的指標或引用轉換成父類表示,這種轉換是安全的;

當進行下行轉換,也就是把父類的指標或引用轉換成子類表示,這種轉換是不安全的,也需要程式設計師來保證;

雖然有安全不安全之分,但是總的來說都是上行下行操作都是合法的~

2:用於基本資料型別之間的轉換,如把int轉換成char,把int轉換成enum等等,這種轉換的安全性需要程式設計師來保證;

3:把void指標轉換成目標型別的指標,是及其不安全的;

將expression轉換為type-id型別,type-id必須是類的指標、類的引用或者是void *;如果type-id是指標型別,那麼expression也必須是乙個指標;如果type-id是乙個引用,那麼expression也必須是乙個引用。

dynamic_cast主要用於類層次間的上行轉換和下行轉換,還可以用於類之間的交叉轉換。

ps:最重要的一點!!!:在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全。在多型型別之間的轉換主要使用dynamic_cast,因為型別提供了執行時資訊。

const_cast用來將型別的const、volatile和__unaligned屬性移除。常量指標被轉換成非常量指標,並且仍然指向原來的物件;常量引用被轉換成非常量引用,並且仍然引用原來的物件。

允許將任何指標型別轉換為其它的指標型別;聽起來很強大,但是也很不靠譜。它主要用於將一種資料型別從一種型別轉換為另一種型別。它可以將乙個指標轉換成乙個整數,也可以將乙個整數轉換成乙個指標,在實際開發中,先把乙個指標轉換成乙個整數,在把該整數轉換成原型別的指標,還可以得到原來的指標值;特別是開闢了系統全域性的記憶體空間,需要在多個應用程式之間使用時,需要彼此共享,傳遞這個記憶體空間的指標時,就可以將指標轉換成整數值,得到以後,再將整數值轉換成指標,進行對應的操作。

不具備移植性,常用與轉化函式指標型別

資料型別 型別轉換

這樣的語句將報錯,因為char型別精度低於int型別,編譯器無法將其自動轉換,只能進行強制轉換 int x 65 char ch char x 舉例1 int age 19 char 女 char result age int 不可以自動轉換成char 精度損失 舉例2 int a 10 int b...

Objective C資料型別 資料型別轉換

資料型別 1.objective c資料型別可以分為 基本資料型別 物件資料型別和id型別。2.基本資料型別有 int float double和char型別。3.物件型別就是類或協議所宣告的指標型別,例如 nsautoreleasepool pool 其中,nsautoreleasepool是乙個...

資料型別轉換

資料型別轉換 public class typeconvert 一 容量小的資料型別自動轉換為容量大的資料型別 資料型別按容量大小排序為 byte,short,char int long float double byte,short,char之間不會互相轉換,他們三者在計算時首先回轉換為int型別...