# 常规转换

# 1. 隐式类型转换

而隐式是编译器自动转换的,一般同一数据类型(如 byte,int,float,double),由低级转为高级为隐式(如 int 转为 float 或 double)

char a ='a';
int x = a;

# 2. 显示类型转换

而高级转为低级为强制类型转换,即显式转换,须用户在代码中写的(如 float 转为 int)。

int a = 10;
double x = (double)a;

# 四种类型转换方式

static_cast
dynamic_cast
const_cast
reinterpret_cast

# static_cast

static_cast 用于显式转换一个表达式的类型。 在将 static_cast 应用于 void* 时,会执行指针的类型转换,将其转换为目标类型指针。
・ 应用场景:
・ 转换数值类型(如 int 转换为 double)
・ 转换指针类型(如将 Base* 转换为 Derived*)
・ 转换引用类型(例如,将 char& 转换为 int&)

# dynamic_cast

dynamic_cast 用于将一个指向基类的指针或引用转换为指向派生类的指针或引用。
・ 应用场景:
・ 用于在运行时动态检测对象实际的派生类型。
・ 通常用于运行多态类型。

# const_cast

const_cast 用于去除写保护属性,可以通过该方式去掉类型的 const 或 volatile 属性。
・ 应用场景:
・ 用于在修改对象的同时维护其类型的常量性。

# reinterpret_cast

reinterpret_cast 是一种最不安全但最灵活的类型转换,它可以将任何指针转换为任何其他类型的指针。
・ 应用场景:
・ 用于在底层系统编程和平台特定代码中。
需要注意的是,不同的类型转换方式在不同情况下可能导致不同的结果,并且这些方式的使用具有一定的风险和限制。在进行类型转换时,请一定要仔细检查您的代码,以确保它是正确的和安全的。