static_cast dynamic_cast
时间: 2023-10-18 13:30:34 浏览: 119
`static_cast`和`dynamic_cast`是C++中的两种类型转换操作符。
`static_cast`用于执行静态类型转换,它可以在编译时进行一些简单的类型检查,但没有运行时的类型检查。它可以用于将一种数据类型转换为另一种数据类型,如将整数转换为浮点数,或将指针转换为不同类型的指针。但是需要注意的是,`static_cast`不能用于执行没有关联性的类型转换,例如将一个指针转换为一个不相关的类的指针。
```cpp
int a = 10;
double b = static_cast<double>(a); // 将整数转换为浮点数
```
`dynamic_cast`用于执行动态类型转换,它在运行时进行类型检查,可以用于处理多态类型(带有虚函数)之间的转换。`dynamic_cast`会检查转换是否有效,如果无效则返回空指针(对于指针类型)或引发`std::bad_cast`异常(对于引用类型)。
```cpp
class Base {
public:
virtual void foo() {}
};
class Derived : public Base {};
Base* obj = new Derived();
Derived* derivedObj = dynamic_cast<Derived*>(obj); // 将基类指针转换为派生类指针
if (derivedObj != nullptr) {
// 转换成功
derivedObj->foo();
} else {
// 转换失败
}
```
需要注意的是,`dynamic_cast`只能用于具有多态性的类层次结构,也就是说,基类必须至少有一个虚函数。否则,编译器将无法检查类型转换的有效性,并引发编译错误。此外,`dynamic_cast`只能用于指针或引用类型的转换,不能用于非引用类型的转换。
阅读全文