C++学习 十九、类型转换符
前言
- 前言
- static_cast
- dynamic_cast
- const_cast
- reinterpret_cast
本篇学习C++中的四个类型转换符号,static_cast,dynamic_cast,const_cast,reinterpret_cast。
C++使用以上这四种转换代替C风格的强制类型转换。
static_caststatic_cast
用于低风险的转换,例如:
- 自动类型转换,如int转double
- 向上转换,如派生类指针转基类指针
- 向下转换,如基类指针转派生类指针(但不安全)
- 定义了转换构造函数和转换函数的类与类型转换
- void指针与其它指针转换
使用方法是static_cast (expression)
:
Base* pb;
Derived* pd;
pd = static_cast(pb);
而不同内置类型指针转换、整型转指针等高风险转换不能使用static_cast。
static_cast
在编译时进行检查,转换失败时报错。
dynamic_cast
用于继承类之间的转换:
- 向上转换
- 向下转换
dynamic_cast
由于向上转换是安全的,不会在运行期间检查。而向下转型不安全,因此将在运行期间检查安全性:
Base* pb;
Derived* pd;
pd = dynamic_cast(pb);
对于向上转换,dynamic_cast
和static_cast
是类似的,对于向下转换,dynamic_cast
更安全。
dynamic_cast
是运行效率较低的转换。
注意:向下转换要求基类必须有虚函数。
const_castconst_cast
用于去除表达式的const/volatile:
const int a = 6;
int* pa = const_cast(&a);
*pa = 5;
std::cout
关注
打赏