C++ 四种类型转换
1. static_cast
只支持相关类型的转换,比较安全,比如short与int,double与int,void* 与 int*, float*等
特点:编译期间转换
2. const_case
去掉表达式的 const 修饰或 volatile 修饰,将 const/volatile 类型转换为非 const/volatile 类型;
尽量少用,主要用于兼容旧代码。
3. reinterpret_cast
是 static_cast 的一种补充,实现不同类型的转换,风险较高,
比如int与指针的转换,两个类型指针A*与B*的转换……使用不小心会导致访问越界!
4. dynamic_cast
只用来类继承的时候指针之间的转换,而且最好是向上继承upcasting,比如:
Base *pD = new Derived(6);
Derived *pB = dynamic_cast<Derived*> (pD);
典型应用场景:
基类指针指向派生类,临时需要以派生类身份调用派生类专有的函数。
因为它本身就是派生类对象,所以转换没有问题。如果以基类身份创建,那就有问题。
总结:
static_cast最常用而且比较安全,reinterpret_cast强制转换不安全,谨慎使用,
const_cast只用来处理const类型变量,dynamic_cast只用来处理类的继承。
本文来自博客园,作者:moonのsun,转载请注明原文链接:https://www.cnblogs.com/moon-sun-blog/p/12132138.html

浙公网安备 33010602011771号