C++中的4个类型转换关键字
2016-12-13 22:21
267 查看
转载:http://poplars.blog.163.com/blog/static/1394221742013021111210567/
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,然后使用的地方再找到想要的字段,转成想要的类型,工作中还没见过代码直接用的。
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++中4个类型转换相关的关键字/特点/应用场合
- C++中的4个类型转换关键字
- C++中的4个与类型转换相关的关键字
- 在C++中,有哪4个与类型转换相关的关键字?这些关键字各有什么特点,应该在什么场合下使用?
- C++与类型转换相关的4个关键字
- c++中转换类型的4个关键字
- 在c++中,有哪4个与类型转换相关的关键字,这些关键字各有什么特点,应该在什么场合下使用?
- C++中的4个类型转换关键字
- 在C++中,有哪4个与类型转换相关的关键字?这些关键字有什么特点?应该在什么场合使用?
- C++中的4个类型转换关键字
- C++中的4个类型转换关键字
- C++中4个与类型转换相关的关键字
- C++与类型转换相关的4个关键字
- 标准C++的4个类型转换符使用场景
- C++的4种类型转换关键字及其特点
- c++几种类型转换关键字
- C++的4种类型转换关键字及其特点
- 关键字:C++ 4种类型转换 cast
- C++ 隐式类型转换与关键字explicit
- C++类型转换关键字(*_cast)