【c++11特性】——static_cast,dynamic_cast,const_cast,reinterpret_cast解析

本文介绍了C++中的四种类型转换运算符:static_cast、dynamic_cast、const_cast和reinterpret_cast,分别阐述了它们的概念、用途、区别和安全特性,重点强调了dynamic_cast在多态场景中的运行时类型检查。

目录

1.static_cast

2.dynamic_cast

dynamic_cast为什么只能用于具有虚函数的类?

3.const_cast

4.reinterpret_cast

reinterpret_cast 的作用

static_cast 和dynamic_cast的区别?


1.static_cast

概念

static_cast 是C++中的一种类型转换运算符,用于执行编译时的类型转换。它通常用于在编译时进行类型转换,而不进行运行时的检查。

static_cast 可以用于以下几种常见的类型转换:

1.基本数据类型的转换

static_cast 可以用于执行基本数据类型之间的转换,例如将整数转换为浮点数,反之亦然。

int integer = 42;
double floating = static_cast<double>(integer);

2.指针类型的转换

static_cast 可以用于执行指针类型之间的转换,但它通常不进行运行时检查。因此,你需要确保转换是安全的

Parent* parentPtr = new Child;
Child* childPtr = static_cast<Child*>(parentPtr);

如果你尝试将一个指向一个类的基类的指针转换为指向一个派生类的指针,但实际上该对象并不是派生类的实例,那么这个转换是不安全的。

class Base {};
class Derived {};

Base* basePtr = new Base;
Derived* derivedPtr = static_cast<Derived*>(basePtr); // 不安全

在这种情况下,由于对象实际上不是 Derived 类的实例,这个转换会导致未定义的行为。

3.类层次结构中的向上转换

当你有一个指向派生类对象的指针,但需要将其转换为基类指针时,可以使用 static_cast 进行向上转换

Child* childPtr = new Child;
Parent* parentPtr = static_cast<Parent*>(childPtr);

2.dynamic_cast

dynamic_cast 是C++中的一种类型转换运算符,主要用于在

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值