C++各种类型转换区别 以及各自功能 应用场景(笔记)

C++共有四种类型转换,其中reinterpret_cast是四种类型中,最不安全的转换,建议尽量少使用,故本文不详细赘述。

1. 静态类型转换( static_cast<目标类型>(原变量) )

常用于类层次结构间,父类和派生类之间指针和引用的互相转换

1.1允许内置数据类型转换

 char a='a'
 double b =static_cast<double>(a);

1.2允许父子(自定义类)之间指针或者引用的转换

class base
{}; //父类
class son:public base
{};//子类
void test()
{
	base *b1=null;
	son * s1=null;
	//父类转子类 向下类型转换,不安全!
	son *s2=static_cast<son*>(b1);
	//子类转父类,向上类型转换,安全!
	base *b2=static_cast<base*>(s1);
}

ps:不允许不同类之间类型转换。必须是同一类的父类以及它的派生类之间才可以进行类型转换

2. 动态类型转换( dynamic_cast<目标类型>(原变量) )

在类层次之间进行向上或向下类型转换
在进行向上类型转换的时候 跟static_cast一样
在进行向下类型转换的时候,相比static_cast多了类型检查,更加安全


## 2.1不允许进行内置数据类型转换

## 2.2允许父子(自定义类)之间指针或者引用的转换

2.2.1 父转子 失败 不安全
2.2.2 子转父 成功 安全 跟static_cast一样
2.2.3 如果发生了多态 可以进行父转子

3. 常量 转换 ( const_cast <目标类型>(原变量) )

常用来修改类型的const属性

## 3.1常量指针转换为非常量指针

const int *p1=null;//常量指针转换为非常量指针   移除const
int *p2 =const_cast<int *>(p1);

int*pp1=null;     	//	非常量指针转换为常量指针 增加const
const int *pp2=const_cast<const int*>(pp1);

## 3.2常量引用转换为非常量引用

int p=10;
int &pp=p;
const int &p3=const_cast<const int&>(pp);

ps:不能直接对非引用或者非指针类型的变量使用const_cast去移除他的const属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值