C++的四种类型转换方式

int a = 10;
double d = static_cast<double> a;

static_cast:用于基本类型继承关系的转换,更改变量内部表示(最常用)

reinsterpret_cast:将指针解释为另一种指针,不修改指针指向的数据(指针)

const_cast:去除const

dynamic_cast:继承类对象的指针或引用的转换(运行时)

 

一,stcti_cast

用于基本类型和继承关系的转换,更改变量内部表示。

static_cast允许执行任意的隐式转换和相反转换动作

相反转换动作:更改变量内部表示

int a = 10;
double c = static_cast<double> a;//基本类型的转换
class Base {

};

class Derived :public Based{
};

Base *a = new Base;
Derived *b = static_cast(Derived) a;//继承关系的转换

二,reinterpret_cast

指针解释为另一种指针,不修改指针指向的数据。

只能作用于指针。

这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。


//基本类型指针的类型转换
double d=9.2;
double* pd = &d;
int *pi = reinterpret_cast<int*>(pd);  //相当于int *pi = (int*)pd;
 
//不相关的类的指针的类型转换
class A{};
class B{};
A* pa = new A;
B* pb = reinterpret_cast<B*>(pa);   //相当于B* pb = (B*)pa;
 
//指针转换为整数
long l = reinterpret_cast<long>(pi);   //相当于long l = (long)pi;

三,const_cast

↵去除或添加常量属性


const int* pci = 0;
int* pk = const_cast<int*>(pci);  //相当于int* pk = (int*)pci;
 
const A* pca = new A;
A* pa = const_cast<A*>(pca);     //相当于A* pa = (A*)pca;

四,dynamic_cast

继承类对象的指针或引用的转换。

与其他3种不同的是:这种转换是在运行时进行转换分析的,其他3种在编译时进行。

转换是否失败,可通过是否为null检测,引用转换失败则抛出一个bad_cast异常。


class Base{};
class Derived : public Base{};
 
//派生类指针转换为基类指针
Derived *pd = new Derived;
Base *pb = dynamic_cast<Base*>(pd);
 
if (!pb)
    cout << "类型转换失败" << endl;
 
//没有继承关系,但被转换类有虚函数
class A(virtual ~A();)   //有虚函数
class B{}:
A* pa = new A;
B* pb  = dynamic_cast<B*>(pa);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值