目录
引言
static_cast
是 C++ 中四个命名强制类型转换操作符之一。它用于执行各种不同类型之间的转换。
1. 使用场景
1.1 基础数据类型的转换
可以将一种基础数据类型转换为另一种基础数据类型。例如,将 double
转换为 int
,或将 float
转换为 double
等。
double a= 5.5;
int i = static_cast<int>(a); // i = 5
1.2 指向派生类的指针或引用转换为指向基类的指针或引用
class Base {};
class Derived : public Base {};
Derived derivedObj;
Base* basePtr = static_cast<Base*>(&derivedObj);
1.3 指向基类的指针或引用转换为指向派生类的指针或引用
但这是不安全的,因为在转换过程中没有运行时检查。如果确实需要运行时检查,应使用 dynamic_cast
。
Base* basePtr = new Base();
Derived* derivedPtr = static_cast<Derived*>(basePtr); // 不安全!
1.4 在有关联的类型之间进行转换
例如,转换枚举值为整数
enum Color { RED, GREEN, BLUE };
int value = static_cast<int>(GREEN); // value = 1
注意
使用 static_cast
时,需要确保转换在逻辑上是合理的,因为 static_cast
不执行运行时类型检查。如果对转换不确定,考虑使用其他类型的转换,如 dynamic_cast
,或者重新评估设计,以避免需要转换。