C++ 类型转换
1.static_cast
static_cast 用于内置类型的数据类型
还有具有继承关系的指针或者引用
2.dynamic_cast
结论 dynamic 只能转换具有继承关系的指针或引用,并且
只能由子类型转换成基类型
3.const_cast
指针 引用或者对象指针
增加或者去除变量的 const 属性
4.reinterpret_cast
【C++ 类型转换】强制类型转换
无关的指针类型都可以进行转换
#include
using namespace std;
class Building{};
class Animal{};
class Cat:public Animal{};
//static_castvoid test01() { int a = 97;
char c = static_cast(a);
cout << c << endl;
//基础数据类型指针 转换失败
//int* p = NULL;
//char* sp = static_cast(p);
//对象指针 转换失败 //Building* building = NULL;
//Animal*animal = static_cast(building);
//转换具有继承关系的对象指针
//父类指针转换成子类指针 Animal* ani = NULL;
Cat* cat = static_cast(ani);
//子类转换成父类
Cat* cat2 = NULL;
Animal* mal = static_cast(cat2);
Animal aniobj;
Animal& aniref = aniobj;
Cat& cat3 = static_cast(aniref);
//结论
//static_cast 用于内置类型的数据类型
//还有具有继承关系的指针或者引用}// dynamic_cast转换具有继承关系的,在转换前会进行对象类型检查void test02() { //基础数据类型转换失败
//int a = 10;
//char c = dynamic_cast(a);
//非继承关系的指针转换失败
//Animal* ani = NULL;
//Building* bul = dynamic_cast(ani);
//具有继承关系的指针转换失败
//Animal* ani = NULL;
//Cat* ca = dynamic_cast(ani);
//原因在于 dynamic 做类型安全检查 Cat* cat = NULL;
Animal* ani = dynamic_cast(cat);
//结论 dynamic 只能转换具有继承关系的指针或引用,并且
//只能由子类型转换成基类型
}
//const_cast 指针 引用或者对象指针void test03() {
int a = 10;
const int& b = a;
//b = 20;
失败
int& c = const_cast(b);
//c = 20;
可以
cout << a << endl;
cout << b<< endl;
cout << c << endl;
//指针
const int* p = NULL;
int* p2 = const_cast(p);
int* p3 = NULL;
const int* p4 = const_cast(p3);
//增加或者去除变量的 const 属性}// reinterpret_cast 强制类型转换typedef void(*FUNC1)(int, int);
typedef int(*FUNC2)(int, char*);
void test04() {
//1.无关的指针类型都可以进行转换 Building* buld2 = NULL;
Animal* ani = reinterpret_cast(buld2);
//2.函数指针转换
FUNC1 func1;
FUNC2 func2 = reinterpret_cast(func1);
}int main() {
test01();
test03();
system("pause");
return 0;
}
推荐阅读
- 一起来学习C语言的字符串转换函数
- opencv|opencv C++模板匹配的简单实现
- 视频转换器哪种好用()
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 以太坊中的计量单位及相互转换
- c++基础概念笔记
- mysql|InnoDB数据页结构
- 接口|axios接口报错-参数类型错误解决
- 怎么将桌面上的CAD图纸添加到软件中进行BMP格式转换()
- 带你了解类型系统以及flow和typescript的基本使用