C++中的4个类型转换关键字
n多書里面推薦要養成使用轉型關鍵字的習慣,幾年過去了,感覺還是不習慣,C風格的轉型操作實在太強大太方便了。
1、const_cast
號稱唯一具有常量性移除的轉型操作符,這個說法實在很廢話,不解釋。平時幾乎沒有用過,遇到需要這個關鍵字的時候,都是直接修改了接口的類型,也不會去用這個關鍵字,一般來說老接口設計有問題啊。明明是const的,非得轉成non-const實在別扭。
2、dynamic_cast
號稱安全向下轉型(safe downcasting),就是把一個父類型轉成它的子類型,如果不是父子關系則會返回0,比如一種用法:
assert(dynamic_cast<derived*>(pBase));
曾經認為是唯一好用又常用的轉型操作符,但在吃過虧后發現也要三思而后用,比較喜歡無腦,所以不再喜歡它了。
不止一本書上說這個操作符有性能問題,但是它們沒有給出具體的度量值,也不會告訴你性能分析軟件沒法將它的耗時與語句直接對應上,比如會把使用這個操作符的語句耗時顯示在unknown分組中,太操蛋了。google的C++編碼規范中也明確禁用此關鍵字,可惜我仍然還沒反應過來,吃了大虧。
總之,熱點程序里面不要用。
3、static_cast
把編譯器隱式執行的轉型搞成顯式的,特別是有告警的類型轉換加上它就ok啦,比如double轉int。偶爾用用,敲這么多字,還是C風格省心……
4、reinterpret_cast
對操作數的位模式做轉化,比如把一個結構體轉成char*。從來沒用過,這名字實在陌生得緊,不看書真心想不起來。一般都會把源操作內存塊轉成void,然后使用的地方再找到想要的字段,轉成想要的類型,工作中還沒見過代碼直接用的。
?
更多見《C++ primer第三版中文版》4.14節&19.1節、《effective C++中文版第三版》條款27
總結
以上是生活随笔為你收集整理的C++中的4个类型转换关键字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中四种类型转换方式
- 下一篇: C++输入输出运算符重载(“”“”)