在C++中存在四种强制类型转换:
- dynamic_cast. 一般用于继承多态关系的指针/引用类型间转换, 能提供类型转换检查功能.
#include <iostream>
class base {
public:
virtual void show(){}
};
class derived : public base {
void show() final {}
};
int main(void) {
derived a;
base *b = dynamic_cast<base*>(&a);
derived *d = dynamic_cast<derived*>(b);
}
上面的例子, 没有实现多态特性进行下行转换会报错. 实现了多态特性下行转换不会报错.
- static_cast: 一般用于继承关系的类型转换或兼容类型之间转换.
#include <iostream>
class base {};
class derived : public base {};
int main(void) {
derived a;
derived *b = static_cast<derived *>(&a);
}
在基类与派生类转换关系中, 使用static_cast
无论是否实现多态特性都不会报错. static_cast
相对于dynamic_cast
类型检查更宽松.
- const_cont: 去掉
const
属性.
#include <iostream>
int main(void) {
const int *a = nullptr;
int *b = const_cast<int*>(a);
}
- reinterpret_cast: 一般用于没有继承关系且不兼容指针/引用类型的之间, 强制转换力度最大.
#include <iostream>
int main(void) {
const int *a = nullptr;
size_t b = reinterpret_cast<size_t>(a);
}
如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.