C++中dynamic_casts、static_casts以及const_casts的区别
时间: 2023-10-06 19:11:50 浏览: 112
static_cast,dynamic_cast,reinterpret_cast和const_cast的区别详解
5星 · 资源好评率100%
C++中有三种类型转换方式:dynamic_casts、static_casts和const_casts。
1. dynamic_casts
dynamic_casts主要用于将基类指针或引用转换为派生类指针或引用。它进行类型安全检查,如果转换成功则返回派生类指针或引用,否则返回空指针或抛出std::bad_cast异常。dynamic_casts只能用于含有虚函数的类。
例如:
```c++
class Base {
public:
virtual void foo() {}
};
class Derived : public Base {
public:
void bar() {}
};
Base* pb = new Derived;
Derived* pd = dynamic_cast<Derived*>(pb);
if (pd != nullptr) {
pd->bar();
}
```
2. static_casts
static_casts主要用于进行基本类型之间的转换,如int和double之间的转换,也可以用来将指针或引用转换为任意不相关的类型。
例如:
```c++
int a = 10;
double b = static_cast<double>(a);
void* p = &a;
int* pi = static_cast<int*>(p);
```
3. const_casts
const_casts主要用于去除const和volatile属性,即将const或volatile指针或引用转换为非const或非volatile指针或引用。
例如:
```c++
const int a = 10;
int& b = const_cast<int&>(a);
b = 20;
```
需要注意的是,const_casts虽然可以去除const属性,但是如果试图修改一个本质上是const的变量,行为是未定义的。
阅读全文