[C++]const_cast,dynamic_cast,reinterpret_cast,static_cast转型
C++四种新式转型:
- const_cast(expression)
- dynamic_cast(expression)
- reinterpret_cast(expression)
static_cast(expression)
①const_cast通常被用来将对象的常量性移除,它是唯一有此能力的C++style转型操作符
②dynamic_cast主要用来执行“安全向下转型”,也就是决定某个对象是否归属于继承体系中的某个类型,它是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作。
③reinterpret_cast意图执行低级转型,实际动作和结果取决于编译器,这也就表示它不可移植,例如将一个int*转换成Int。
④static_cast用来强迫隐式转换,例如将non_const对象转换成const对象,或者将int转换成double等,也可以用来执行上述多种转换的反转换,比如void*转换成typed指针,或者pointer-to-base转换成pointer-to-derived,但是它无法将non-const转换成const-cast,这只有const_cast能办到。
注意:之所以需要dynamic_cast,通常是因为你想在一个你认定为derived class对象身上执行derived class操作函数,但你的手上却只有一个“指向base class”的pointer或者reference,你只能用它们来处理对象。总结:①如果可以,尽量避免转型动作,特别是在注重效率的地方避免dynamic_cast(会多次使用strcmp)如果有个设计需要转型动作,试着发展无需转型的设计。
②如果转型是必要的,试着将它隐藏于某个函数背后,客户随后可以调用该函数,而不需要将转型放入他们的代码中。
③您可使用C++stytle的转型,也不要使用旧式转型,前者很容易识别出来,而且也有各自的职能。
最新文章
- dom 的介绍
- java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext问题原因及解决方法
- 使用JavaScript在项目前台开发的58种常用小技巧
- Js 扩展
- 在线学习体验大PK 云智慧发布在线教育网站性能监测报告
- Eclipse控制台输出信息的控制
- javascript----bug
- Python框架
- hdu 4031 attack 线段树区间更新
- python优雅编程之旅
- JBPM工作流(三)——ProcessEngine与Service API
- 安卓程序代写 网上程序代写[原]Android开发技巧--Application
- MySQL纯透明的分库分表技术还没有
- QQ聊天框测试用例设计
- AttributeError: 'module' object has no attribute 'face'
- Java web的安全约束--Basic验证
- P4345 [SHOI2015]超能粒子炮·改
- Android HAL实例解析
- ssh整合思想 Spring分模块开发 crud参数传递 解决HTTP Status 500 - Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or(增加事务)
- sizeof()解析(原)