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