C++的顯示轉換

來源:互聯網
上載者:User

近日在看《C++ primer》,不得不說,中國的教材有些坑人,老師也有些坑人,只是說有些坑人,因為還是有些不錯的!

在需要資料類型轉換時,我習慣於用()進行轉換,這也是譚浩強書本教的,也是大學老師教的方式。今天讀《C++ primer》方才知道這是一種C風格的資料類型轉換,是C++為了相容C而保留下來的。

實際上,C++提供了類型轉換操作符供顯示的類型轉換,即:

static_cast, dynamic_cast, const_cast, reinterpret_cast。

這四個是用來進行顯示資料類型轉換的。

這些資料類型轉換操作符的一致用法是:

cast-name <type> (expression);

其中,cast-name是類型轉換操作符名,type是目的資料類型 ,expression是待轉換資料。

下面對這四個顯式資料轉換操作符進行簡單的說明。

1.static_cast

在C語言中使用()實現的轉換都可以使用static_cast操作符實現之。

2.const_cast

使用該操作符可以將待轉換資料的const屬於去除,如下代碼所示:

#include <iostream>using namespace std;int main(int argc, char ** arg){const int b = 1;int *p = const_cast<int *>(&b);return 0;}

3.reinterpret_cast

通俗的說,這個轉換可以講任何資料類型的指標轉換為其他資料類型的指標。

4.dynamic_cast

用在子類與父類之間的轉換。


這裡引用一個網路的部落格的總結:

http://www.cnblogs.com/ider/archive/2011/08/05/cpp_cast_operator_part6.html

對於傳統的轉換方式(C式或函數式),只在數實值型別(包括整型、浮點型、字元類型和枚舉)上使用。這也是延續C的形式,當然這類轉換也是可以用static_cast來替換,但是因為是基本類型,所以傳統轉換已經很直觀。

對於const_cast轉換運算子,用在需要去除掉const限定的時候。其實這種情況出現的很少,可能的方法在const_cast一文中已經又舉例,不過還是反覆強調,
使用const_cast轉換後,絕對不可試圖修改結果的值。

對於reinterpret_cast轉換運算子,一般用在將對象指標類型轉換到整數類型或者void
* (null 指標)。如同在文中舉出的隱患,因此注意的是,若要使用其結果,一定要將類型轉換回去後使用。也不要將隨意的整數轉換成指標類型。

對於static_cast轉換運算子,將其用在對象的轉換之上(雖然static_cast也可以用在有繼承關係的類型指標之間,但是還是將這方面的轉換交給dynamic_cast來操作吧),
static_cast會調用相應的建構函式或者重載的轉換運算子。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.