C++ 类型转换(强制类型转换)

C++四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast


1、static_cast                                                                                                                                                                         

    static_cast 用于数据类型的强制转换,强制将一种数据转换成另一种数据, 编译阶段是类型检查;

    用法:static_cast<type_id>(express)

  • 用于类层次结构中基类和派生类之间指针或引用的转换(上行转换,即派生类的指针或引用转换成基类,是安全的;下行转换,即基类的指针或引用转换为派生类,没有动态类型检查,是不安全的);
  • 用于基本数据类型之间的转换;
  • 把空指针转换成目标类型指针;
  • 把任何类型的表达式转换为void类型。
int a = 3;
int b = 2;
double res = static_case<double>(a) / static_cast<double>(b);

2、dynamic_cast                                                                                                                                                                    

  • dynamic_cast是运行时处理的,运行时要进行类型检查;
  • 不能用于内置的基本数据类型的强制转换;
  • dynamic_cast转换成功返回值是指向类的指针或引用,否则返回NULL;
  • 使用dynamic_cast进行转换,基类中一定要有虚函数;
  • 下行转换时具有类型检查的功能,比static_cast更安全

3、const_cast                                                                                                                                                                        

    const_cast 用于修改类型的const或volatile属性。通常用来去除const、 volatile属性,去除的对象必须是指针或引用。

  • 常量指针被转化成非常量指针
  • 常量引用被转化成非常量引用
  • 常量对象被转化成非常量对象

    用法:const_cast<type_id>(expression)

const in a = 10
const int *p = &a;
*q = const_cast<int *>(p);
*q = 20

4、reinterpret_cast                                                                                                                                                                

     reinterpret_cast用于改变指针或引用的类型将指针或引用转换为一个足够长度的整形将整形转换为指针或引用类型

     即,可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针

用法:reinterpret_cast<type_id>(express)

            type_id必须是一个指针、引用、算术类型、函数指针或成员指针。

int *a = new int;
double *d = reinterpret_cast<double *>(a)

引用链接:

https://www.cnblogs.com/Allen-rg/p/6999360.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值