C++ | 四种类型转换

文章目录

  • 前言
  • 一、类型转化的四种方式
  • 二、每个类型转换的使用以及注意事项
    • 1.const_cast
    • 2.static_cast
    • 3.reinterpret_cast
    • 4.dynamic_cast
  • 总结


前言

简单记录一下C++中常用的四种类型转换。


提示:以下是本篇文章正文内容,下面案例可供参考

一、类型转化的四种方式

1.去常转换:const_cast
2.静态转换:static_cast
3.动态转换:dynamic_cast
4.重新解释:reinterpret_cast

二、每个类型转换的使用以及注意事项

1.const_cast

const_ cast(a) 常被用于去除这里a变量或表达式的const属性, a的类型就是T
C++ | 四种类型转换_第1张图片
作用:
把常量指针或常量引用转换为非常量指针或非常量引用,并仍然指向原来的对象;把非常量指针或非常量引用转换为常量指针或常量引用,并仍然指向原来的对象;强制转换类型必须是指针*或引用&

2.static_cast

static_ cast它能在内置的数据类型间互相转换,对于类只能在有联系的指针类型间进行转换.
1.用于基本类型间的转换
2.不能用于基本类型指针间的转换
C++ | 四种类型转换_第2张图片
3.于有继承关系类对象之间的转换和类指针之间的转换
(派生类转换成基类时安全(上行转换),基类转换成派生类时不安全(下行转换))
C++ | 四种类型转换_第3张图片
C++ | 四种类型转换_第4张图片
4.无类型指针的转换(不安全)

int main()
{
	int a=10;
	void*vi=&10;
	float*fp=static_cast<float*>(vi);//不安全,当使用读取*fp的值时会扩大读取的字节个数,造成读取数据错误的情况。
}

3.reinterpret_cast

reinterpret_ cast任何指针都可以转换成其它类型的指针,T必须是一个指针、 引用、算术类型、指向函数的指针或指向一个类成员的指针。任何指针都可以转换成其它类型的指针,不安全的转换。
C++ | 四种类型转换_第5张图片

4.dynamic_cast

dynamic_ cast 转换符只能用于指针或者引用。dynamic_cast转换符只能用于含有虚函数的类。dynamic_ cast转换操作符在执行类型转换时首先将检查能否成功转换,如果能成功转换则转换之,如果转换失败, T是指针则反回一个nullptr,如果是转换的是T引用,则抛出一个bad_ cast异常, 所以在使用dynamic_ cast转换之间应使用if语句对其转换成功与否进行测试。
使用条件:公有继承且有虚函数的下行转换,否则会报错!

示例1:
C++ | 四种类型转换_第6张图片
示例2:
在这里插入图片描述
C++ | 四种类型转换_第7张图片
C++ | 四种类型转换_第8张图片

总结

提示:这里对文章进行总结:

RTTI(Run Time Type ldentification)即通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引|用所指的对象的实际派生类型。

RAII也称为“资源获取就是初始化”,是c++等编程语言常用的管理资源、避免内存泄露的方法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。

你可能感兴趣的:(C++,c++,数据结构,开发语言)