C++有4種顯式類型轉換操作符,最好不要使用C語言編程方式遺留的隱式類型轉換。第一,顯式類型轉換在代碼中更明顯,可以提醒程序員你的代碼設計可能存在一些丑陋的地方;第二,顯式類型轉換可以檢測轉換中的錯誤,比如當cast失敗時,你會得到空指針,但隱式轉換就不會;第三,有些情況,隱式類型轉換無法做到,比如const_cast的功能。
static_cast
編譯器隱式執行的任何類型轉換,都可以使用static_cast顯式完成。一般用於不同大小的類型之間互相轉換。
顧名思義,用於轉換掉表達式的const性質。
比如我們從外部接受了一個const類型的參數,再傳遞給下層函數時,又需要修改它const_cast就派上用場了。
將基類類型的指針或引用安全地轉換為派生類型的指針或引用。如果轉換到指針類型的dynamic_cast失敗,則其結果為0值;如果轉換到引用類型的dynamic_cast失敗,則拋出一個bad_cast類型的異常。這也是為什麼不使用C方式類型轉換的原因,C方式的轉換失敗後,我們不知道如何檢測錯誤。
為操作數的位模式提供較低層次的重新解釋。啥意思呢。假設有一堆數據,保存的是一個int類型的序列,本來應該使用int*對其進行遍歷,但有時候我們可能需要逐個字節的進行訪問,以進行一些特殊操作。那麼就可以使用此轉換操作符。但我們應當有清醒的意識,其實指針指向的類型一直都是int。