C++系列十:日常学习-类型转换

介绍:

C++ 提供了几种类型转换(type conversion)的方式,包括静态转换(static_cast)、动态转换(dynamic_cast)、常量转换(const_cast)和重新解释转换(reinterpret_cast)。

  1. static_cast:这是最通用的转换,可以用于非多态类型之间的转换,也可以用于多态类型到非多态类型的转换。没有运行时类型检查来保证转换的安全性。
  2. dynamic_cast:主要用于多态类型之间的转换。它用于确定一个指针是否指向特定类型的对象,或者用于获取一个指向特定类型的指针。它通常用于处理类继承的情况。
  3. const_cast:主要用于修改类型的const或volatile属性。例如,你可以用const_cast去掉一个变量的const属性,或者加上const属性。
  4. reinterpret_cast:这是最不安全的转换,可以用于任何其他转换都无法进行的转换。例如,你可以将一个指针转换为整数,或者将一个整数转换为指针。这种转换的结果通常需要谨慎处理,因为结果可能依赖于特定的硬件和编译器实现。

案例:

//static_cast
int i = 1;  
double d = static_cast<double>(i);  // 将整数转换为浮点数  

class Base { };  
class Derived : public Base { };  
Base* b = new Derived;  // 向上转型,将Derived的对象转型为Base  
Derived* d = static_cast<Derived*>(b);  // 向下转型,将Base的指针转型为Derived的指针
//需要注意的是,下行转换(从基类指针转换为派生类指针)如果没有动态类型检查,是不安全的。因此,对于多态类型之间的转换,建议使用dynamic_cast。


//dynamic_cast
class Base { virtual void a() {} };  
class Derived : public Base {};  
Base* b = new Base;  
Derived* d = dynamic_cast<Derived*>(b);  // 将基类指针转换为派生类指针


//const_cast
const int i = 1;  
int* p = const_cast<int*>(&i);  // 将 const 类型的变量 i 转换为非常量类型


//reinterpret_cast
int i = 1;  
int* p = &i;  
char* c = reinterpret_cast<char*>(p);  // 将 int 指针转换为 char 指针
posted @ 2023-09-05 09:10  cactus9  阅读(48)  评论(0编辑  收藏  举报