首先,c++與型別轉換相關的四個關鍵字有:const_cast, static_cast, dynamic_cast, reinterpret_cast.
什麼是型別轉換?
表示式是否合法取決於運算元的型別,而且合法的表示式其含義也由運算元型別決定。但是在c++中,某些型別之間存在相關的依賴關係。若兩種型別相關,則可在需要某種型別的運算元位置上,使用該型別的相關型別物件或值。如果兩個型別之間可以相互轉換,則稱這兩個型別相關。
那麼,第乙個關鍵字登場了,static_cast關鍵字就是提供這種場合下的型別轉換。c++預設的整數型別之間的轉換就屬於這種。
與之相反,如果被轉換的兩種型別之間不相關,比如int指標轉換為char指標,就要使用reinterpret_cast這個關鍵字。
接下來登場的是const_cast。 使用const_cast會消除被轉換型別的const特性,而且只有const型別的變數才能使用。那麼,什麼情況下需要消除乙個const變數的const特性呢?比如,有時候有的函式的形參型別為非const型別,那麼如果你要將乙個const型別的引數傳入就會報錯。所以在這種情況下需要先使用const_cast轉化一下。
最後,就剩下dynamic_cast了。它是一種作執行時(run-time)檢測的型別轉換。它可以將基類型別的指標或引用安全地轉換為派生型別的指標或引用。當具有基類的引用或指標,但需要執行不是基類組成部分的派生類操作的時候,需要動態的強制型別轉換。通常,從基類指標獲得派生類行為最好的方法是通過虛函式。當使用虛函式的時候,編譯器自動根據物件的實際型別選擇正確的函式。但是,在某些情況下,不可能使用虛函式。這時候就需要使用dynamic_cast關鍵字了。但是,能用虛函式還是用虛函式最好。
與其他強制型別轉換不同,dynamic_cast涉及執行時型別檢查。如果繫結到引用或指標的物件不是目標型別的物件,則dynamic_cast失敗。
補充:在上面四個型別轉化關鍵字中,除了static_cast,其他的三個都有可能涉及到指標的型別轉換。從本質上來說,指標的型別不同,並沒有產生很大的差異,他們都是需要足夠的記憶體來存放乙個機器位址。「指向不同型別之各指標」間的差異,既不在其指標表示法不同,也不在其內容(代表乙個位址)不同,而是在其所定址出來的object不同。也就是說,「指標型別」會教導編譯器如何解釋某個特定位址中的記憶體內容及其大小。
所以,轉換(cast)其實是一種編譯器指令。大部分情況下它並不改變乙個指標所含的真正位址,它只影響「被指出之記憶體大小和其內容」的解釋方式。
C 中四個和型別轉換有關的關鍵字
在c c 語言中用 type value 在c 還可以採用type value 來進行顯式型別轉換 explicit type conversion 常常又被稱為強制轉換 cast投射 鑄模 這種轉換的正確性完全掌握在程式設計師手中,傳統上強制轉換往往被過度使用,成為c 程式犯錯的乙個主要根源。為了...
C 中,有哪四個與型別轉換相關的關鍵字
特點 靜態轉換,在編譯處理期間。應用場合 主要用於c 中內建的基本資料型別之間的轉換,但是沒有執行時型別的檢測來保證轉換的安全性。用於基類和子類之間的指標或引用之間的轉換,這種轉換把子類的指標或引用轉換為基類表示是安全的 進行下行轉換,把積累的指標或引用轉換為子類表示時,由於沒有進行動態型別檢測,所...
從四個方面分析關鍵字
之前寫過一篇如何利用做seo後,發現現在很多童鞋一直在研究seo優化,雖然這個方法只是網路推廣方法中的一種,但確是很多站長與從業者追捧的物件。但筆者發現很多新人都沒辦法找到適合自己 的關鍵字,很多關鍵字雖然流量很大,但不一定可以給你的 帶來實質的轉換率。而且那些熱門的關鍵字都是擁有很多的競爭者,其中...