C++学习笔记8 - static_cast、reintepret_cast、const_cast、dynamic_cast、auto、decltype

一、static_cast源生类型之间的隐式类型转换,可以用 static_cast 来明确告知编译器,避免警告,转换后可能丢失精度。正确性需要程序员自己保证。用来将(void *p)转为具体的指针类型,取回原有的指针类型用于类层次结构中父类和子类之间指针和引用的转换。其中上行转换是安全的,下行转换是不安全的。总结:static_cast<>()是编译时静态类型检查,使用 static_cast 可以尽量发挥编译器的静态类型检查功能,但是并不能保证代码一定“正确”(譬如可能会丢失精度导
摘要由CSDN通过智能技术生成

一、static_cast

  1. 源生类型之间的隐式类型转换,可以用 static_cast 来明确告知编译器,避免警告,转换后可能丢失精度。正确性需要程序员自己保证。
  2. 用来将(void *p)转为具体的指针类型,取回原有的指针类型
  3. 用于类层次结构中父类和子类之间指针和引用的转换。其中上行转换是安全的,下行转换是不安全的。
  4. 总结:static_cast<>()是编译时静态类型检查,使用 static_cast 可以尽量发挥编译器的静态类型检查功能,但是并不能保证代码一定“正确”(譬如可能会丢失精度导致错误,可能经过(void*)之后导致指针类型错误,可能下行转换导致访问错误)
  5. 评价:能理解使用 static_cast 的意义,但是实际上只能解决很初级的编程问题,属于初级语法特性。
  6. int* p; void* p1 = p; int* p2 = static_cast<int *>(p1);

二、 reintepret_cast

  1. 用于明确告知编译器该类型转换在编译时放行,正确性由程序员自己负责。
  2. reintepret_cast 转换前后对象的二进制未发生任何变化,只是对这些二进制位的编译器类型标识发生了变化,或者说是编译器看待这些二进制位的结论不同了。
  3. reintepret_cast 一般用于将指针转成 int 或者回转,将A类型指针转为B类型指针等
  4. reintepret_cast 其实就是让C++在本次转换中放弃严苛的编译器类型检查
  5. int*
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值