【C/C++】C++中的四种强制类型转换

发布于:2024-03-28 ⋅ 阅读:(137) ⋅ 点赞:(0)

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


C++四种类型转换

  • static_cast<类型>(待转换量)
  • dynamic_cast<类型>(待转换量 )
  • const_cast<类型>(待转换量 )
  • reinterpret_cast<类型>( 待转换量 )

为什么要提出新的类型转换?
C语言中的强制类型转换无所不能,而C++强调类型安全。


static_cast静态转换

编译时确定的,用于相关内容的转换 。

  • int short char 之间
  • 浮点数与整数
  • 普通指针和泛型指针

例如:

    int a = 10;
    int b = 3;
    cout << static_cast<float>(a) / static_cast<float>(b) << endl;

    int *ptr = &a;
    void *ptr2 = static_cast<void*>(ptr);

可以转换继承中对象的向上和向下(向下转换(父类指针转为子类)没有类型检查,可能会有问题:例如当多个孩子继承父类)

注: A是B的父类,B->A 继承中对象的向上转换 A->B 向下转换

不相关的、不安全的不能转换
例如: student与int
char* 与int*
int ->int或 int->int


dynamic_cast动态转换

只适用于继承链上的两个类之间的转换,不能用于其他基本变量的转换

继承的向上转换效果等同于static_cast

继承向下转换会进行动态的安全检查

  • 如果转换失败,将会返回空指针异常
class Father 
{ 
    virtual ~Father() {} 
};  
class Son : public Father 
{
};  
  
Father* pFa = new Son;  
Son* pSon = dynamic_cast<Son*>(pFa);  

当向下转换(父类指针转为子类)时,父类中必须包含虚函数!(static_cast 不需要)


const_cast去常转换

用于改变类型的const或volatile属性。

它常用于修改指针或引用的const属性,以便修改原本定义为const的数据。

    const char *str = "TianXi";
    char *p = const_cast<char*>(str);

可以用于:

  • 对常量去常,移除const属性,但修改是不安全的
  • 对常对象去常,然后可以调用各种类成员函数
  • 将 volatile 转为非 volatile,防止修饰变量编译优化

reinterpret_cast重解释类型转换

C++中的强制类型转换,有安全隐患,一般编译不过再用。

它可以把任何类型的指针转换成任何其他类型的指针,或者把任何整数类型转换成任何指针类型,或者把指针转换成整数类型。但是这种转换没有运行时类型检查来保证安全性。


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)