目錄const_cast
reinterpret_cast
舊式型別轉換
顯示地告訴程式閱讀者和編譯器,不考慮高精度想低精度轉換時造成的精度損失
#includeusing namespace std;
int main()
注:1.const_cast可以去除底層const,但不代表轉換後的指標可以改變其指向的值,如果*p是乙個const物件,依然不能用p改變其值。
2.const_cast只能去除const,不能改變物件的原型別,const_cast(pc);
是不行的,改用static_const(pc);
。
const_cast在函式過載時運用廣泛
為運算物件的位模式提供較低層次的重新解釋,但並不真正改變物件型別
所以追蹤錯誤時會更加困難,不建議使用。#includeusing namespace std;
:c語言風格的函式型別轉換,其含義並不清晰,根據語境會分別具有int main(){
int *ip;
char *pc = reinterpret_cast(ip); //pc所指的真實物件實際上是int型別而不是字元
string s(pc); //用int*來初始化string顯然會出現問題,但由於有顯示型別轉換,所以編譯器不會報錯
cout《使用reinterpret_cast是非常危險的,用pc初始化str的例子很好地證明了這一點。其中的關鍵問題是型別改變了,但編譯器沒有給出任何警告或者錯誤的提示資訊。當我們用乙個int的位址初始化pc時,由於顯式地聲稱這種轉換合法,所以編譯器不會發出任何警告或錯誤資訊。接下來再使用pc時就會認定它的值是char*型別,編譯器沒法知道它實際存放的是指向int的指標。最終的結果就是,在上面的例子中雖然用pc初始化 str 沒什麼實際意義,甚至還可能引發更糟糕的後果,但僅從語法上而言這種操作無可指摘。查詢這類問題的原因非常困難,如果將ip 強制轉換成pc的語句和用pc初始化 string物件的語句分屬不同檔案就更是如此。
所以在程式設計時經歷避免強制型別轉換
(type)expr
static\_cast
、const\_cast
、reinterpret\_cast
的功能。
int *ip;
char *pc = (char*)ip; //作用同reinterpret_cast
C 中的顯式轉換
顯式轉換也成為強制轉換 cast 有如下幾種型別 static cast,dynamic cast,const cast,reinterpret cast。1.const cast 將轉換掉表示式的const性質。const char pc str char pc string copy const...
C 顯式轉換
標準c 包含乙個顯式的轉換語法 static cast 用於 良性 和 適度良性 的轉換,包括不用強制轉換 const cast 用於 const 和 或 volatile 進行轉換 reinterpret cast 轉換為完全不同的意思。為了安全的使用它,關鍵必須轉換回原來的型別。轉換成的型別一般...
C 顯式轉換
任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static cast c primer 更為簡單的解釋就是,使用這個型別轉換符,能夠進行比較自然的轉換,類別相近的轉換,而有一些型別差距明顯的轉換則不可以,例如 不能用於不同型別的指標之間轉換 void 除外 不能用於整型與指標之間的...