C++中有哪4種與類型轉換相關的關鍵字?有什麼特點?應該在什麼場合下使用?

C++中,四個與類型轉換相關的關鍵字:static_cast、const_cast、reinterpret_cast、dynamic_cast。

1.static_cast------運算符完成相關類型之間的轉換**
使用場景:如在同一類層次結構中的一個指針類型到另一個指針類型,整型到枚舉類型,或者浮點型到整型等。
例:   int m=10;
 double n=static_cast < int > m;
          int * q=static_cast < int* >(malloc(100));


2.reinterpret_cast------處理互不相關類型之間的轉換**
使用場景:如從整型到指針,一種類型的指針到另一種類型的指針等
例: int a=10;
 double* b=reinterpret_cast<double*>(a); //b的轉換結果爲0x0000000a


3.dynamic_cast------處理基類型到派生類型的轉換**(這個說法不是很準確,爲了好理解先這麼寫)
使用場景:基類必須有虛函數,即爲多態時,可以轉換

該運算符將expression轉換成type_id類型的對象。type_id必須是類的指針,類的引用或者空類型的指針。
a、如果type_id是一個指針類型,那麼expression也必須是一個指針類型,如果type_id是一個引用類型,那麼expression也必須是一個引用類型。
b、如果type_id是一個空類型的指針,在運行的時候,就會檢測expression的實際類型,結果是一個由expression決定的指針類型。
c、如果type_id不是空類型的指針,在運行的時候指向expression對象的指針能否可以轉換成type_id類型的指針。
d、在運行的時候決定真正的類型,如果向下轉換是安全的,就返回一個轉換後的指針,若不安全,則返回一個空指針。
e、主要用於上下行之間的轉換,也可以用於類之間的交叉轉換。上行轉換時和static_cast效果一樣,下行轉換時,具有檢測功能,比static_cast更安全。

 

 4,const_cast

特點:去常轉換,編譯時執行。 
應用場合:const_cast操作不能在不同的種類間轉換。相反,它僅僅把它作用的表達式轉換成常量。它可以使一個本來不是const類型的數據轉換成const類型的,或者把const屬性去掉。 


volatile的作用是: 作爲指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.
簡單地說就是防止編譯器對代碼進行優化.比如如下代碼:
a=1;
a=2;
a=3;
a=4;
對外部硬件而言,上述四條語句分別表示不同的操作,會產生四種不同的動作,但是編譯器卻會對上述四條語句進行優化,認爲只有a=4(即忽略前三條語句,只產生一條機器代碼)。如果鍵入volatile,則編譯器會逐一的進行編譯併產生相應的機器代碼(產生四條代碼).

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章