dynamic_cast与statistic_cast用法
时间: 2024-06-21 17:04:03 浏览: 210
c++ dynamic_cast与static_cast使用方法示例
`dynamic_cast`和`static_cast`是C++中用于类型转换的运算符,它们在运行时和编译时有不同的行为:
1. **dynamic_cast**(动态强制转换):
- 运行时检查:`dynamic_cast`会在运行时检查源类型是否真的可以安全地转换为目标类型,如果是继承关系(包括虚继承),如果存在多态上下文(例如指针或引用),则会尝试调用虚函数。
- 类型检查:如果类型不匹配或者不是继承关系,它会返回`nullptr`或`bad_cast`异常,表示无法进行有效转换。
- 示例:
```cpp
MyClass* dynamicMyClass = dynamic_cast<MyClass*>(parentObject);
```
2. **static_cast**(静态强制转换):
- 编译时执行:`static_cast`是一个编译期操作,无需运行时检查,可以直接转换类型,无论是基本类型、指针还是引用。
- 强制类型转换:它可以用于将一种类型直接转换为另一种类型,但不支持运行时多态。
- 示例:
```cpp
int i = 10;
MyClass staticMyClass = static_cast<MyClass>(i); // 直接将整数转换为MyClass对象,如果i不是MyClass的子类,这将是错误的
```
阅读全文