创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
c语言内容💖:
专栏:c语言之路重点知识整合
【c语言】全部知识点总结
目录
- C++四种类型转换
- static_cast静态转换
- dynamic_cast动态转换
- const_cast去常转换
- reinterpret_cast重解释类型转换
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++中的强制类型转换,有安全隐患,一般编译不过再用。
它可以把任何类型的指针转换成任何其他类型的指针,或者把任何整数类型转换成任何指针类型,或者把指针转换成整数类型。但是这种转换没有运行时类型检查来保证安全性。
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |