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

來源:互聯網
上載者:User

    即使類型轉換本身是危險的,在有些時候類型轉換也是不可或缺的。程式員不使用顯式轉換,編譯器也可能會使用隱式轉換,那還不如把代碼控制在程式員自己手中。

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

 

static_cast

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

doubled = 97.0;charch = static_cast<char>(d);

 

const_cast

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

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

constchar* pc_str;char*pc = string_copy(const_cast<char*>(pc_str));

dynamic_cast

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

Derived*derivedPtr = dynamic_cast<Derived*>(basePtr);

reinterpret_cast

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

int*ip;char*pc = reinterpret_cast<char*>(ip);

上述內容大部分摘自《C++Primer》一書。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.