在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); }