• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2019-11-10 02:24 Aet 隐藏边栏 |   抢沙发  11 
文章评分 2 次,平均分 5.0

static_cast

用来完成编译器认可的隐式类型转换。
任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。
范围:

  • 基本数据类型之间的转换。
  • 派生体系中向上转型:将派生类指针或引用转化为基类指针或引用。
  • 任意类型指针与void*之间的转换。

dynamic_cast

用来完成派生类指针或引用与基类指针或引用之间的转换。
特点:

  • 其他三种都是在编译时完成的,dynamic_cast是在运行时处理的,运行时要进行运行时类型检查。
  • 基类中要有虚函数,因为运行时类型检查的类型信息存在于虚函数表中,而有虚函数才会有虚函数表。
  • 它可以实现向上转型或向下转型,前提是继承关系是public或protected。

reinterpret_cast

用于任意指针或引用之间的转换
它会产生一个新的值,这个值会与原始参数有完全相同的比特位。

  • 指针类型 $\rightarrow$ 一个足够大的整数类型。
  • 整数类型 || 枚举类型 $\rightarrow$ 指针类型。
  • 指向函数的指针 $\rightarrow$ 另一个不同类型的指向函数的指针。
  • 一个指向对象的指针 $\rightarrow$ 另一个不同类型的指向对象的指针。
  • 一个指向类函数成员的指针 $\rightarrow$ 另一个不同类型的函数成员的指针。
  • 一个指向类数据成员的指针 $\rightarrow$ 不同类型的数据成员的指针。

const_cast

只能对指针或引用去除或添加const属性
不能用于不同类型之间的转换,只能改变同种类型的const属性

  • 函数形参是一个非const引用,要传一个const引用给它,可以用const_cast去除实参的常量性
  • 一个const对象,想调用该const对象里的非const函数,可以用const_cast去除对象的常量性

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-21
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享