C++四种新式转型:

  1. const_cast(expression)
  2. dynamic_cast(expression)
  3. reinterpret_cast(expression)
  4. 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的转型,也不要使用旧式转型,前者很容易识别出来,而且也有各自的职能。

最新文章

  1. dom 的介绍
  2. java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext问题原因及解决方法
  3. 使用JavaScript在项目前台开发的58种常用小技巧
  4. Js 扩展
  5. 在线学习体验大PK 云智慧发布在线教育网站性能监测报告
  6. Eclipse控制台输出信息的控制
  7. javascript----bug
  8. Python框架
  9. hdu 4031 attack 线段树区间更新
  10. python优雅编程之旅
  11. JBPM工作流(三)——ProcessEngine与Service API
  12. 安卓程序代写 网上程序代写[原]Android开发技巧--Application
  13. MySQL纯透明的分库分表技术还没有
  14. QQ聊天框测试用例设计
  15. AttributeError: 'module' object has no attribute 'face'
  16. Java web的安全约束--Basic验证
  17. P4345 [SHOI2015]超能粒子炮·改
  18. Android HAL实例解析
  19. 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(增加事务)
  20. sizeof()解析(原)

热门文章

  1. Qt Quick 用cmake怎么玩子项目
  2. C语言------结构体和共用体
  3. Transformer 结构分析
  4. springboot整合mybatis步骤以及错误集合
  5. Oracle用户创建及删除
  6. 05 uniapp/微信小程序 项目day05
  7. NC 使用Nginx实现https的反向代理
  8. jvm调优思路及调优案例
  9. 2022春每日一题:Day 39
  10. Conda 环境移植 (两种方式)