c++的強制轉換方式比c語言更加豐富,常見的有四個:
1,const_cast
2,static_cast
3,dynamic_cast
4,reinterpret_cast
這四個的使用方式都一樣:t t = ***_cast(expressions)。
1,const_cast這個操作符可以去掉變數const屬性或者volatile屬性的轉換符,這樣就可以更改const變數了。比如下面**
string str =
"hello"
;char
*_const = str.
substr(0
,3).
c_str()
;//c_str()返回const char*型別,直接賦值給char *顯然出錯,這句話編譯不能通過
char
*non_const = const_cast<
char
*>
(str.
substr(0
,3).
c_str()
);//將const屬性移除,可以通過編譯了
2,static_cast 這個操作符相當於c語言中的強制型別轉換的替代品。多用於非多型型別的轉換,比如說將int轉化為double。但是不可以將兩個無關的型別互相轉化。(在編譯時期進行轉換)
3,dynamic_cast操作符 可以安全的將父類轉化為子類,子類轉化為父類都是安全的。所以你可以用於安全的將基類轉化為繼承類,而且可以知道是否成功,如果強制轉換的是指標型別,失敗會返回null指標,如果強制轉化的是引用型別,失敗會丟擲異常。dynamic_cast 轉換符只能用於含有虛函式的類。用乙個簡單的**例子可以看出
#include
using namespace std;
class animal };
class dog : public animal };
class wolf : public animal };
class nonrelated };
intmain()
4, reinterpret_cast:重新解釋(無理)轉換。即要求編譯器將兩種無關聯的型別作轉換。 C 四種cast常用法
用法 static cast type id expression 1.用於類層次結構中基類和子類之間指標或引用的轉換。進行上行轉換 把子類的指標或引用轉換成基類表示 是安全的 進行下行轉換 把基類指標或引用轉換成子類表示 時,由於沒有動態型別檢查,所以是不安全的。2.用於基本資料型別之間的轉換,如...
C 的四個基本技巧
1 如果可能盡量使用介面來程式設計 net框架包括類和介面,在編寫程式的時候,你可能知道正在用.net的哪個類。然而,在這種情況下如果你用.net支援的介面而不是它的類來程式設計時,會變得更加穩定 可用性會更高。請分析下面的 private void loadlist object items,li...
C 的四個基本技巧
1 如果可能盡量使用介面來程式設計 net框架包括類和介面,在編寫程式的時候,你可能知道正在用.net的哪個類。然而,在這種情況下如果你用.net支援的介面而不是它的類來程式設計時,會變得更加穩定 可用性會更高。請分析下面的 private void loadlist object items,li...