18.1 c++ 类型转换

第十八章 类型转换

标准c++提供了一个显示的转换的语法,来代替旧的C风格的类型转换。使用C风格的强制转换可以把想要的任何东西转换成我们需要的类型。那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同类型的强制转换。c++风格的强制转换其他的好处是,他们能更清晰的表明他们要干什么。程序员只要扫一眼这样的代码,就能立即知道一个强制转换的目的。

18.1 上行、下行转换的概述

在这里插入图片描述

18.2 static_cast静态类型转换

class Base{};
class Son:public Base{};
class Other{};

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

基本类型:支持

int num = static_cast<int>(3.14);//ok

上行转换:支持 安全

Base *p = static_cast<Base *>(new Son);

下行转换:支持(不安全)

Son *p2 = static_cast<Son *>(new Base);

不相关类型转换:不支持

Base *p3 = static_cast<Base *>(new Other);//err

18.3 dynamic_cast静态类型转换

dynamic_cast主要用于类层次间的上行转换和下行转换

基本类型:不支持

int num = dynamic_cast<int>(3.14);//err

上行转换:支持

Base *p1 = dynamic_cast<Base *>(new Son);//ok

下行转换:不支持(不安全)

Son *p2 = dynamic_cast<Son *>(new Base);//err

不相关类型转换:不支持

Base *p3 = dynamic_cast<Base *>(new Other);//err

18.4 const_cast常量转换

1、将const修饰的指针或引用 转换成非const(支持)

const int *p1;
int *p2 = const_cast<int *>(p1);

const int &ob = 10;
int &ob1 = const_cast<int &>(ob);

2、将非const修饰的指针或引用 转换成 const(支持)

int *p3;
const int *p4 = const_cast<const int *>(p3);

int data = 10;
const int &ob2 = const_cast<const int &>(data);

18.5 重新解释转换(reinterpret_cast)(最不安全)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值