static_cast
•用于非多态类型的转换
•不执行运行时类型检查(转换安全性不如 dynamic_cast)
•通常用于转换数值数据类型(如 float -> int)
•可以在整个类层次结构中移动指针,子类转化为父类安全(向上转换),父类转化为子类不安全(因为子类可能有不在父类的字段或方法)
向上转换是一种隐式转换。

dynamic_cast
•用于多态类型的转换
•执行行运行时类型检查
•只适用于指针或引用
•对不明确的指针的转换将失败(返回 nullptr),但不引发异常
•可以在整个类层次结构中移动指针,包括向上转换、向下转换
const_cast
•用于删除 const、volatile 和 __unaligned 特性(如将 const int 类型转换为 int 类型 )

reinterpret_cast
•用于位的简单重新解释
•滥用 reinterpret_cast 运算符可能很容易带来风险。 除非所需转换本身是低级别的,否则应使用其他强制转换运算符之一。
•允许将任何指针转换为任何其他指针类型(如 char* 到 int* 或 One_class* 到 Unrelated_class* 之类的转换,但其本身并不安全)
•也允许将任何整数类型转换为任何指针类型以及反向转换。
•reinterpret_cast 运算符不能丢掉 const、volatile 或 __unaligned 特性。
•reinterpret_cast 的一个实际用途是在哈希函数中,即,通过让两个不同的值几乎不以

c++强制类型转换运算符相关推荐

  1. 重载new、delete和强制类型转换运算符()

    1.重载new和delete运算符 内存管理运算符new.new[].delete和delete[]也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就 ...

  2. C++编程进阶4(C++中的强制类型转换运算符、不要返回自定义类内部成员的指针,引用和迭代器)

    十五.C++中的强制类型转换 C语言中的强制类型转换方式有两种 T i = (T)exp; T i = T(exp); 这两种方式没有差别,C++中也支持这两种方式,但是和C++中的强制类型转换运算符 ...

  3. 区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值

    这三个名字可能很绕,看着也很不一样,但其实是三个很容易混淆的概念,并且经常在实际编程中遇到.这里拿出来比较一下. 首先是强制类型转换运算符的重载,作用是当前对象向其他类型的转换,常见的形式是 oper ...

  4. c语言运算符类型转换,C语言中强制类型转换运算符的独特作用

    C语言中强制类型转换运算符的独特作用 在C语言中有一个强制类型转换运算符,它为C语言中的数据类型转换带来 (本文共2页) 阅读全文>> 在进行C++类的设计时,我们常常需要为类对象设计运算 ...

  5. C++ 强制类型转换运算符

    C++ 将类型名作为强制类型转换运算符. C++ 引入了四种功能不同的强制类型转换运算符以进行强制类型转换:static_cast.reinterpret_cast.const_cast 和 dyna ...

  6. C++ 重载强制类型转换运算符

    C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符. 类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数.经过适当重载后,(类型名)对象 ...

  7. 强制类型转换运算符的优先级

    强制类型转换 int i=10; char b=20; 如:i=b;//这样赋值没有问题,因为低字节类型转换成高字节类型. 如果是b=i;//这样会有问题,b=(char)i;//因为高字体转换为低字 ...

  8. c语言--强制类型转换运算符

    当我们想改变一个表达式的类型时,"强制类型转换符",get it! 1.一般形式: (类型名)(表达式) 2.一般应用: (float) x                     ...

  9. 强制类型转换运算符—C++基础篇

    VC++中的四种强制转换类型运算符,const_cast,reinterpret_cast,static_cast,dynamic_cast 1, static_cast<T*>(a)  ...

最新文章

  1. 「小程序JAVA实战」小程序的页面重定向(60)
  2. oracle 14108,ORA-14108:非法分区扩展表名的语法
  3. 用IIS建立的.net网站通过IP地址不能访问解决方法
  4. 无法使用共享文件夹?VMware怎么安装VMware Tools? (GCC、kernel headers、make)(失败)
  5. 数据结构--图(Graph)详解(三)
  6. TraceEventsDB event(跟踪事件)总结
  7. Android触控屏幕Gesture(GestureDetector和SimpleOnGestureListener的使用教程) 分类:Androidandroid实例...
  8. MongoDB,子查询
  9. 估计理论(6):如何确定BLUE?
  10. 《Clean Code》 代码简洁之道
  11. 【第三方服务】微信公众平台授权登录
  12. 微型计算机分类可以分为哪些,微型计算机的分类通常以微处理器的什么来划分...
  13. 技术小卡之Redis 管道技术
  14. linux uvc 拍照程序,Linux UVC driver
  15. 程序员的你想跳槽了?谨记:哪里都不好混!
  16. ThinkPad P1 Gen4 是否支持单条4T固态?
  17. 4月11号软件资讯更新合集......
  18. 【自制】我造了一台 钢 铁 侠 的 机 械 臂 !【硬核】
  19. IDEA(或Android Studio)推送(push)代码报错 unable to read askpass response from ‘C:\Users\Urasaki\AppData\Loc
  20. 华硕主板无盘启动bios设置_【华硕主板bios启动顺序】华硕主板bois启动项_华硕主板bios硬盘启动...

热门文章

  1. plc和pc串口通讯接线_Plc与pc串口调试手册
  2. 压力管道流量计算公式_给水管管径及流量计算方法
  3. HTML5如何学?学HTML5要注意什么?
  4. 中报表导出带表头_来看看Java是 如何优雅的导出 Excel的
  5. Python自动化运维——系统进程管理模块
  6. minute教会你shell
  7. wxWidgets:wxRichTextCtrl类用法
  8. wxWidgets:wxColourPickerCtrl类用法
  9. boost::multiprecision模块将 std::numeric_limits 用作 multiprecision.qbk 上的多精度文档片段的示例
  10. boost::hana::sum用法的测试程序