1. 程式人生 > >static_cast和reinterpret_cast

static_cast和reinterpret_cast

本文討論static_cast<> 和 reinterpret_cast<>。

介紹

大多程式設計師在學C++前都學過C,並且習慣於C風格(型別)轉換。當寫C++(程式)時,有時候我們在使用static_cast<>和reinterpret_cast<>時可能會有點模糊。在本文中,我將說明static_cast<>實際上做了什麼,並且指出一些將會導致錯誤的情況。

泛型(Generic Types)

01.float f = 12.3; 02. 03.float* pf = &f;
04.// static cast<> 05. 06.// 成功編譯, n = 12 07. 08.int n = static_cast(f); 09. 10.// 錯誤,指向的型別是無關的(譯註:即指標變數pf是float型別,現在要被轉換為int型別) 11.//int* pn = static_cast(pf); 12. 13.//成功編譯 14. 15.void* pv = static_cast(pf); 16. 17.//成功編譯, 但是 *pn2是無意義的記憶體(rubbish) 18.
19.int* pn2 = static_cast(pv); 20.// reinterpret_cast<> 21. 22.//錯誤,編譯器知道你應該呼叫static_cast<> 23. 24.//int i = reinterpret_cast(f); 25. 26.//成功編譯, 但是 *pn 實際上是無意義的記憶體,和 *pn2一樣 27. 28.int* pi = reinterpret_cast(pf);

簡而言之,static_cast<> 將嘗試轉換,舉例來說,如float-到-integer,而reinterpret_cast<>簡單改變編譯器的意圖重新考慮那個物件作為另一型別。

指標型別(Pointer Types)

指標轉換有點複雜,我們將在本文的剩餘部分使用下面的類:

相關推薦

c++轉換static_cast reinterpret_cast

<<static_cast 和 reinterpret_cast>> 作者: 闕榮文([email protected]) C/C++是強型別語言,不同型別之間的相互轉換是比較麻煩的.但是在程式設計實踐中,不可避免的要用到型別轉換.有2中型別轉換:隱式型別轉換和強制型別轉

static_castreinterpret_cast

本文討論static_cast<> 和 reinterpret_cast<>。 介紹 大多程式設計師在學C++前都學過C,並且習慣於C風格(型別)轉換。當寫C++(程式)時,有時候我們在使用static_cast<>和reinterpret_cast&l

dynamic_cast、static_cast、const_castreinterpret_cast的區別

           C++的型別轉換分為兩種:隱式轉換和顯示轉換。            一、 對於隱式轉換,就是標準的轉換,在很多時候,不經意間就發生了,例如int和float加法,int型別就會被隱式轉換為float了,這種稱為升級轉換。還有就是把等號右邊的值轉換為左

C++中static_castdynamic_cast強制類型轉換

tro 父類 虛函數表 找到 virt 內部 pub 判斷 () 在C++標準中,提供了關於類型層次轉換中的兩個關鍵字static_cast和dynamic_cast。 一、static_cast關鍵字(編譯時類型檢查) 用法:static_cast < type-i

C++強制型別轉換(dynamic_cast,static_cast, const_cast, reinterpret_cast

[toc] C++同時提供了4種新的強制型別轉換形式(通常稱為新風格的或C++風格的強制轉 型):const_cast(expression)、dynamic_cast(expression)、 reinterpret_cast(expression)和 st

static_cast,const_cat,reinterpret_cast,dynamic_cast四種類型的轉換的區別

1.static_cast 一般的內建型別轉換或者具有繼承關係的物件之間的轉換 #include <iostream> using namespace std; class animal

C++霧中風景11:釐清C++型別轉換(static_cast,dynamic_cast,reinterpret_cast,const_cast)

C++是一門弱型別的語言,提供了許多複雜和靈巧型別轉換的方式。筆者之前寫的Python與Go都是強型別的語言,對這種弱型別的設計實在是接受無力啊~~ ( 生活所迫,工作還得寫C++啊~~)C++語言提供了四種類型轉換的操作:static_cast,dynamic_cast,reinterpret_cast,

【C++】static_cast AND reinterpret_cast

用法:static_cast < type-id > ( expression ) 該運算子把expression轉換為type-id型別,但沒有執行時型別檢查來保證轉換的安全性。它主要有如下幾種用法: ①用於類層次結構中基類(父類)和派生類(子類)之間指標或

static_castreinterpret_cast使用

static_cast,reinterpret_cast 用法:static_cast < type-id > ( expression ) 該運算子把expression轉換為type-id型別,但沒有執行時型別檢查來保證轉換的安全性。它主要有如

static_castdynamic_cast理解

dynamic_cast主要用於執行“安全得向下轉型”,而且基類中必須是多型類。 static_cast可以用於強制隱型轉換,它還可以用於很多這樣得轉換得反向轉換。但是它不能將一個const物件轉換成一個non_const物件。最接近c型別得轉換。如果基類中具有多型性,轉換最好使用dynamic_

C++ static_castdynamic_cast的區別

網上也看到了一些相關的總結,總覺得他們總結的不太好,還是按照自己的理解寫一寫吧。 C語言型別轉換:           C語言提供了隱式轉換,顯示轉換。通過這兩種方式,C語言中大部分的型別轉換都可以順利進行。至於能不能進行轉換,轉換後的結果如何,編譯器不管,需要使用者自己去

C++中static_castdynamic_cast強制型別轉換

轉載地址:http://blog.csdn.net/qq_26849233/article/details/62218385 一、static_cast關鍵字(編譯時型別檢查) 用法:static_cast < type-id > (expression

c++強制型別轉換:dynamic_cast、const_cast 、static_castreinterpret_cast

dynamic_cast:   通常在基類和派生類之間轉換時使用,run-time   cast const_cast:   主要針對const和volatile的轉換.  static_cast:   一般的轉換,no   run-time   check.通常,如果你不

型別轉換_static_castreinterpret_cast

傳智掃地僧課程學習筆記。 /* C風格的強制型別轉換(Type Cast)很簡單,不管什麼型別的轉換統統是: TYPE b = (TYPE)a C++風格的型別轉換提供了4種類型轉換操作符來應對不同場合的應用。   static_cast 靜態型別轉換。如i

static_cast, dynamic_cast, reinterpret_cast, const_cast區別比較

原帖 :http://www.cnblogs.com/jerry19880126/archive/2012/08/14/2638192.html 隱式轉換(implicit conversion) short a=2000; int b; b=a; short

類型轉換:static_castreinterpret_cast

通用 key nbsp 四種 double 語言 繼承關系 丟了 安全性 一、隱式類型轉換 系統自動進行,不需要程序開發人員介入。 int m = 3 + 45.6;// 48 把小數部分截掉,也屬於隱式類型轉換的一部分 double b = 3 + 45.6; //

[C/C++]_[0基礎]_[static_cast,reinterpret_cast,dynimic_cast的使用場景差別]

輸出 type class 可能 pen rgs make 在那 char 場景:1. C++的對象差別於C的原因是他們能夠有繼承關系, 方法有重載, 覆蓋關系等, 他們的對象內存數據結構因此也比較復雜.2. 非常多情況下我們須要一個父類來存儲子類的指針對象進行通用方法

static_cast、dynamic_cast、reinterpret_castconst_cast

轉自:https://blog.csdn.net/gyymen/article/details/53534200 C++的型別轉換符:static_cast、dynamic_cast、reinterpret_cast、和const_cast 形式:class_name <type>

混跡C++ 之reinterpret_caststatic_cast

reinterpret_cast <new_type> (expression) reinterpret_cast運算子是用來處理無關型別之間的轉換;它會產生一個新的值, 這個值會有與原始引數(expressoin)有完全相同的位元位。 IBM的C++指南裡倒

C++ ------ static_cast,dynamic_cast,reinterpret_cast,const_cast

兩個 sof some cor 指針類型 pre employ where 現在 C++類型轉換分為:隱式類型轉換和顯式類型轉換 第1部分. 隱式類型轉換 又稱為“標準轉換”,包括以下幾種情況:1) 算術轉換(Arithmetic conversion) : 在混合類型的