C 中的4個型別轉換關鍵字

2021-06-16 14:29:49 字數 745 閱讀 7994

1、const_cast

號稱唯一具有常量性移除的轉型操作符,這個說法實在很廢話,不解釋。平時幾乎沒有用過,遇到需要這個關鍵字的時候,都是直接修改了介面的型別,也不會去用這個關鍵字,一般來說老介面設計有問題啊。明明是const的,非得轉成non-const實在彆扭。

2、dynamic_cast

號稱安全向下轉型(safe downcasting),就是把乙個父型別轉成它的子型別,如果不是父子關係則會返回0,比如一種用法:

assert(dynamic_cast(pbase));

曾經認為是唯一好用又常用的轉型操作符,但在吃過虧後發現也要三思而後用,比較喜歡無腦,所以不再喜歡它了。

不止一本書上說這個操作符有效能問題,但是它們沒有給出具體的度量值,也不會告訴你效能分析軟體沒法將它的耗時與語句直接對應上,比如會把使用這個操作符的語句耗時顯示在unknown分組中,太操蛋了。google的c++編碼規範中也明確禁用此關鍵字,可惜我仍然還沒反應過來,吃了大虧。

總之,熱點程式裡面不要用。

3、static_cast

把編譯器隱式執行的轉型搞成顯式的,特別是有告警的型別轉換加上它就ok啦,比如double轉int。偶爾用用,敲這麼多字,還是c風格省心……

4、reinterpret_cast

對運算元的位模式做轉化,比如把乙個結構體轉成char*。從來沒用過,這名字實在陌生得緊,不看書真心想不起來。一般都會把源操作記憶體塊轉成void,然後使用的地方再找到想要的字段,轉成想要的型別,工作中還沒見過**直接用的。

4個型別轉換關鍵字

dynamic cast在類的繼承關係的前提下使用,沒有繼承關係的類之間轉換會為空。其中虛函式的特性非常重要,在這裡重點體現 如果沒有虛函式,該轉換也會發生問題。經常在書上看到rtti特性和此相關的說明,可能就是這個問題 1.基類轉換到子類,發生錯誤 其實也不是錯誤,就是為空了 安全性檢測的重要性,...

C 轉換關鍵字

implicit為隱式的轉換 explicit為顯示的轉換 通過這種方法可以有效地驗證資料,對引數進行處理。不管是否實用,在此先記錄下來 以後回顧用 class 轉換關鍵字 set public myage private myage int32 age 整型到myage 的隱式轉換 public ...

C 的4種型別轉換關鍵字及其特點

1 reinterpret cast 重解釋轉換 reinterpret cast 轉換乙個指標為其它型別的指標。它也允許從乙個指標轉換為整數型別。反之亦然。這個操作符能夠在非相關的型別之間轉換。操作結果只是簡單的從乙個指標到別的指標的值的二進位制拷貝。在型別之間指向的內容不做任何型別的檢查和轉換。...