C++基础——C++风格的类型转换(static_cast、const_cast、dynamic_cast、reinterpret_cast)

我们有如下的测试类:

class B
{
public:virtual void foo() {}/ 虚函数构成多态关系
};
class D :public B
{};

我们首先来看如下的基类指针和类型转换:

B* pB = new D;// 父类指针,指向子类对象
D* pD1 = static_cast<D*>(pB);// vaild ! d1 有效且正确
D* pD2 = dynamic_cast<D*>(pB);// valid ! d2 有效且正确

static_cast的安全性面临挑战的例子发生在:

B* pB = new B;// 父类指针,指向父类对象
D* pD1 = static_cast<D*>(pB);// 通过,但 pD1 访问属于D的内容时,无效,属于未定义行为;
D* pD2 = dynamic_cast<D*>(pB);// 转换失败,pD2 是 nullptr

References

[1] Regular cast vs. static_cast vs. dynamic_cast [duplicate]

static_cast vs dynamic_cast相关推荐

  1. static_cast、dynamic_cast、const_cast和reinterpret_cast总结

    前言 这篇文章总结的是C++中的类型转换,这些小的知识点,有的时候,自己不是很注意,但是在实际开发中确实经常使用的.俗话说的好,不懂自己写的代码的程序员,不是好的程序员:如果一个程序员对于自己写的代码 ...

  2. C/C++ 之 C++强制类型转换(static_cast、dynamic_cast、const_cast、reinterpret_cast)

    文章转载自:https://www.cnblogs.com/chenyangchun/p/6795923.html .在了解这块时,发现了这篇文档,感觉写的很不错! c强制转换与c++强制转换 c 语 ...

  3. 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载)

    C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的 ...

  4. static_cast、dynamic_cast、reinterpret_cast、const_cast[转]

    C-style cast举例: int i; double d; i = (int) d; 上面的代码就是本来为double类型的d,通过(int)d将其转换成整形值,并将该值赋给整形变量i (注意d ...

  5. static_cast、dynamic_cast、reinterpret_cast、和const_cast

    (转自http://hi.baidu.com/seekvista/blog/item/87845a60ae248845ebf8f8dd.html) 关于强制类型转换的问题,很多书都讨论过,写的最详细的 ...

  6. static_cast与dynamic_cast转换

    static_cast与dynamic_cast转换 C语言中两种类型转换 隐式转换和显式转换 隐式转换:不同数据类型之间赋值和运算,函数调用传递参数,由编译器完成. char ch; int i = ...

  7. C++类型转换运算符 static_cast,dynamic_cast,reinterpret_cast,const_cast

    类型转换是一种让程序猿可以临时或永久性改变编译器对对象的解释机制.可改变对象解释方式的运算符称为类型转换运算符. 为何须要进行类型转换 通常为了实现使用不同环境的个人和厂商编写的模块可以相互调用和协作 ...

  8. 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast

    C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的 ...

  9. 常规投放vs. static_cast与dynamic_cast [重复]

    class="question-status question-originals-of-duplicate"> 这个问题已经在这里有了答案: 什么时候应该使用static_ ...

  10. c++ 数据类型转换: static_cast、dynamic_cast、reinterpret_cast和const_cast

    [目录] 引言 static_cast 定义 dynamic_cast 定义 举例:下行转换(把基类的指针或引用转换成子类表示) 举例:上行转换(把子类的指针或引用转换成基类表示) 举例: stati ...

最新文章

  1. 公告三大“罪状”,无人驾驶公司Roadstar联合创始人被罢免
  2. 百度新key申请步骤
  3. boost::mpi模块实现scan集合的测试
  4. java怎么获取当前日期_JAVA中获取当前系统时间
  5. PyQt5 Python主对话框创建关于对话框源代码
  6. 埃夫特机器人示教器keba_埃夫特下一代智能工业机器人研发及产业化项目奠基...
  7. 小度智能音箱维修点_小度智能音箱——联通智慧生活语音服务入口
  8. fcn网络训练代码_FCN网络训练 菜鸟版
  9. JavaScript 调用 Web Service 的多种方法
  10. hping 详解_hping3 详解
  11. excel VBA编程入门,自定义excel数据库模板生成sql语句
  12. 【Vue】VSCode搭建Vue项目
  13. Kotlin知识积累——let,with,run,apply,alse的用法
  14. 车联网大规模商用关键突破口深度调研,车路协同智慧高速全国建设情况
  15. linux逻辑卷缩减命令,linux命令:resize2fs、lvm逻辑卷lv扩展及缩减
  16. html实现鼠标跟随,html5实现鼠标跟随
  17. 基于注解的Excel导出万能模板
  18. 06 体脂率案例优化
  19. 网络安全笔记-TCP/IP
  20. Linux系统shell脚本之打印系统的IP信息

热门文章

  1. matlab中confcounts,Matlab函数分类汇总—R2011b版.doc
  2. python运行报错无法映射_2018-03-01跳一跳python实践
  3. 巧妇难为无米之炊 走出软件测试的困境
  4. 基于MFC和OpenCV的摄像机定标与立体匹配测试程序
  5. rsync java_Linux 同步工具rsync学习
  6. java代码删除本地文件_java程序实现删除本地文件
  7. 2019-08-12 计划与安排
  8. 在xtragrid中如何自定义日期编辑控件的格式
  9. Xen Server 7.0 一直无法退出维护模式
  10. SharpDevelop 如何切换设计视图和代码视图