首先說明,該內容主要摘自c++ stl 開發技術導引。
在c語言中,我們一般採用隱式型別轉換,這樣導致的結果是可讀性不高。
如下這段**
這段**將double型別轉換成了int型別,問題是如果別人來看這段**的時候,別人可能就不知道這種轉換是程式需要的還是編寫**的人不小心寫錯了呢。
因此,在c++程式中應盡量使用顯示型別。c++的現實型別轉換主要有4種:reinterpret_cast、static_cast、const_cast、dynamic_cast。
1、reinterpret_cast
reinterpret_cast型別轉換函式主要用於指標型別之間的轉換。它不改變指標變數值。在編譯時重新解釋指標的型別即可。
注意:它不能轉換非指標型別,也不能將const型別指標轉為非const型別的指標(這個可以用const_cast來實現)
2、const_cast
const_cast用來去除const指標的常量屬性,即將const指標轉為非const指標。 反過來也行。跟reinterpret_cast一樣,它也不能轉換非指標型別的變數或物件。它也是在編譯期間完成型別更改。
3 、static_cast
static_cast主要用於基本型別之間和具有繼承關係的型別之間的轉換(只能將子類轉為父類),該中轉換一般會更愛變數的內部表示方式,因此static_cast應用於指標型別轉換,沒有多大意義,即使允許指標型別轉換,也不及reinterpret_cast解釋高效。
注:可以將父類與子類的指標 進行相互交換(即既可將子類指標轉為父類指標,也可以將父類指標轉為子類指標),編譯都能通過,但是將父類指標轉為子類指標時,會有一定的危害性。注意上面是說指標,在非指標的物件中,不能把父類轉為子類。
4、dynamic_cast
dynamic_cast是與static_cast相對的,是動態轉換。這種轉換是在執行時進行轉換分析的,而非在編譯期,這也是它明顯區別與以上三種轉換方式的乙個特徵。dynamic_cast只能用於繼承類物件的指標之間或引用之間 。進行轉換時,會根據當前執行物件的執行時型別資訊(run-time type indentification),判斷型別物件之間的轉換是否合法。若指標轉換失敗,將返回null指標。引用轉換失敗,則丟擲乙個bad_cast異常。
c 顯示型別轉換
dynamic cast,static cast,const cast,1.使用dynamic cast 操作符將基類型別物件的引用或者指標轉換為同一繼承層次中其他型別的引用或者指標 執行時型別檢查 2.const cast 操作符將變數的const性質轉換掉 example1 double d 8...
c 顯示型別轉換
c 引入了4個新的強制型別轉換操作符,static cast dynamic cast const cast reinterpret cast,用以支援更為精細的型別轉換。這些操作符取代了以往小圓括號所代表的舊式轉型,能夠清楚闡明轉型的目的。這些新式轉型操作符給了編譯器更多資訊,讓編譯器清楚知道轉型...
C 中顯示型別轉換
c 引入了 const cast,reinterpret cast 之類的新的顯式型別轉換方式,不僅大多數 c 程式設計師覺得不是很習慣,就連某些有經驗的c 程式設計師都會在一些細節上犯錯。誠然,既然我們可以簡單的寫出 int i int p p is a pointer 這樣的顯式轉換,為什麼還要...