CPP学习之类型转换

C++类型转换

类型转换『cast』是将一种数据类型转换成另一种数据类型,大部分是非常有用的,但在转换指针时,我们很可能会将其转换成一个比它更大的类型,可能会破坏其他数据。

动态dynamic_cast

主要用于类层次间的上行和下行转换,上行转换时和static_cast一样效果;在 下行转换时,dynamic_cast具有类型检查功能,更安全;

//dynamic_cast不支持基本类型
char a='a';
//double d=dynamic_cast<double>(a);//err

//上行转换(父类指针指向子类空间 安全)
animal *p1=dynamic_cast<animal*>(new dog);

//下行转换(子类指针指向父类空间  不安全)
//dog* p2= dynamic_cast<dog*>(new animal);//err

//不相关类之间转换,不可以err

静态static_cast

用于类层次结构中基类和派生类之间指针或者引用的转换。

class animal{};
class dog:public animal{};
class other{};
int main(){
	//static_cast 作用于基本类型
	char a='a';
	double d=static_cast<double>(a);
	
	//作用于自定义数据类型(结构体、类)
	//关系类转换
	//上行转换(安全)
	animal *p1=static_cast<animal*>(new dog);
	//下行转换(不安全)
	dog* p2= static_cast<dog*>(new animal);
	//不属于父子类 不可转换,static_cast会报错,强制转换有重大安全隐患
	return;
}

在这里插入图片描述

常量 const_cast

修改类型const属性,常量指针(引用)转换成非常量指针(引用),并且仍然指向原来 的对象;

const int* p = nullptr;
int  *p1 = const_cast<int*>(p);

int *p2 = nullptr;
const int *p3 = const_cast<const int *>(p2);

//只支持指针和应用
const int p4 = 100;
//int p5 = const_cast<int>(p4);//err

int data = 100;
//常量引用转换成普通引用
const int &dd = data;
int &dd2 = const_cast<int &>(ob);

重新解释 reinterpret_cast

这是最不安全的,强制类型转换。一般不用,还不如C语言的转换。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值