歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++中的顯式類型轉換操作符

C++中的顯式類型轉換操作符

日期:2017/3/1 10:11:44   编辑:Linux編程
即使類型轉換本身是危險的,在有些時候類型轉換也是不可或缺的。程序員不使用顯式轉換,編譯器也可能會使用隱式轉換,那還不如把代碼控制在程序員自己手中。

C++有4種顯式類型轉換操作符,最好不要使用C語言編程方式遺留的隱式類型轉換。第一,顯式類型轉換在代碼中更明顯,可以提醒程序員你的代碼設計可能存在一些丑陋的地方;第二,顯式類型轉換可以檢測轉換中的錯誤,比如當cast失敗時,你會得到空指針,但隱式轉換就不會;第三,有些情況,隱式類型轉換無法做到,比如const_cast的功能。

static_cast

編譯器隱式執行的任何類型轉換,都可以使用static_cast顯式完成。一般用於不同大小的類型之間互相轉換。

  1. doubled = 97.0;
  2. charch = static_cast<char>(d);
const_cast

顧名思義,用於轉換掉表達式的const性質。

比如我們從外部接受了一個const類型的參數,再傳遞給下層函數時,又需要修改它const_cast就派上用場了。

  1. constchar* pc_str;
  2. char*pc = string_copy(const_cast<char*>(pc_str));
dynamic_cast

將基類類型的指針或引用安全地轉換為派生類型的指針或引用。如果轉換到指針類型的dynamic_cast失敗,則其結果為0值;如果轉換到引用類型的dynamic_cast失敗,則拋出一個bad_cast類型的異常。這也是為什麼不使用C方式類型轉換的原因,C方式的轉換失敗後,我們不知道如何檢測錯誤。

  1. Derived*derivedPtr = dynamic_cast<Derived*>(basePtr);
reinterpret_cast

為操作數的位模式提供較低層次的重新解釋。啥意思呢。假設有一堆數據,保存的是一個int類型的序列,本來應該使用int*對其進行遍歷,但有時候我們可能需要逐個字節的進行訪問,以進行一些特殊操作。那麼就可以使用此轉換操作符。但我們應當有清醒的意識,其實指針指向的類型一直都是int。

  1. int*ip;
  2. char*pc = reinterpret_cast<char*>(ip);
上述內容大部分摘自《C++Primer》一書。下載見 http://www.linuxidc.com/Linux/2012-05/60075.htm
Copyright © Linux教程網 All Rights Reserved