C++四种类型转换

在C++中,数据类型转换是一种常用的操作,它允许你将一种数据类型的值转换为另一种数据类型。这可以在不同的场景中使用,例如,当你需要将一个整数转换为浮点数,或者将一个浮点数转换为整数时。

C++提供了两种主要的类型转换方式:隐式类型转换(Implicit Type Conversion)和显式类型转换(Explicit Type Conversion)。

隐式类型转换:编译器自动进行的类型转换。例如,当你将一个较小的整数类型(如int)赋值给一个较大的整数类型(如long)时,编译器会自动进行转换。

1
2
int a = 10;
long b = a; // 隐式类型转换

显式类型转换:需要程序员明确指定的类型转换。这通常在你需要执行可能导致数据丢失或更改的转换时使用。C++提供了几种显式转换的方式:

C风格的类型转换(也称为旧式类型转换):

1
2
int a = 10;
float b = (float)a; // C风格的类型转换

静态转换(static_cast):用于非多态类型之间的转换(例如,基本数据类型之间的转换,或者类与子类之间的转换)。

1
2
int a = 10;
float b = static_cast<float>(a); // 静态转换

动态转换(dynamic_cast):主要用于多态类型之间的转换,它在运行时检查转换是否有效。

1
2
3
4
5
class Base {};
class Derived : public Base {};

Base* b = new Derived();
Derived* d = dynamic_cast<Derived*>(b); // 动态转换

常量转换(const_cast):用于修改类型的const或volatile属性。

1
2
const int a = 10;
int* b = const_cast<int*>(&a); // 常量转换

重新解释转换reinterpret_cast):用于进行底层数据类型的重新解释。它提供了最低的转换级别,并且在使用时需要格外小心,因为它可能会导致未定义的行为。

1
2
int a = 10;
float* b = reinterpret_cast<float*>(&a); // 重新解释转换