0
点赞
收藏
分享

微信扫一扫

C++四种类型转化

爱喝酒的幸福人 2024-10-31 阅读 12

1、static_cast(静态转换)

static_cast<type>(expre)

使用范围:

1)用于基本类型间的转换,如int->char,int->enum

2)指针转换的限制:不能转换掉const,volatile或者__unaligned属性。指针类型不同不能进行转换

3)可以将void*转换成任意指针类型

4)左值转化成右值(C++11常性右值退化成常性左值)

5)继承关系父子类转换

上行转换是安全的:把派生类指或引用转换成基类

下行转换是不安全的:把基类指针或引用转换成派生类时,没有动态检查

用处:std::move、std::forward

2、const_cast(去常性转换)

可以修改类型的const和volatile

特点:

1)去除变量的只读属性

2)强制转换的目标必须时指针或引用

内置类型在打印时,编译器看到是常性值,直接进行替换操作,无法实现修改值

自定义类型可以做到

去常性转换针对于同一类型

3、reinterpret_cast(重新解释)

说明:要求类型必须是一个指针、引用、算数类型、函数指针或者成员指针。

特点:

1)用于指针类型间的强制转换

2)用于整数和指针类型的强制转换

4、dynamic_cast(动态类型转换)

基类必须有虚函数,必须是共有继承

动态转换时会读取虚表中RTTI的数据来确定转换是否成功

特点:

1)是在运行时执行的类型转换

2)如果针对指针类型转换失败,结果会抛出nullptr

3)如果针对引用类型转换失败,结果会抛出一个异常

4)在进行上行转换时,效果和静态转换一样

5)在进行下行转换时,dynamic_cast具有类型检查的功能,更加安全

6)动态类型转换能将对象类型转换成无类型,不能将无类型转换成对象类型

举报

相关推荐

0 条评论