首页
社区
课程
招聘
[分享]c++的四种类型强制转换(菜鸡勿喷)
发表于: 2019-10-7 21:03 5251

[分享]c++的四种类型强制转换(菜鸡勿喷)

2019-10-7 21:03
5251

​ 在c++中,您可以继续使用c语言语法提供的强制类型转换,但由于c的类型转换存在较多缺点,类型转换过于随意,导致在c+中出现的新特性无法较好的继承下来。所以c+提供了自己特有的强制类型转换,其更加标准也更加严格。

使用场景:在c++中由于无法将非const类型(非基础类型)直接赋值给const类型,所以需要强制转换。

但一般不将const类型转换为非const类型,因为可以直接把const类型的变量赋值给非const类型的变量。

const_cast主要有三种应用场景:

static_cast是一个c++运算符,功能是把一个表达式转换为某种类型类型,但没有运行时类型检查来保证转换的安全性。

使用场景:

用于类层次结构中基类和派生类之间指针或引用的转换。

进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;

进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。

用于基本数据类型直接的转换,例如把int转换成char,把int转换成enum,这样的类型转换也是不安全的。

把空指针转换成目标类型的空指针。

把任何类型的表达式转换成void类型。

类层次结构中的指针的转换(引用同理)

c++中的static_cast执行非多态的转换,用于代替c中通常的转换操作,被做为隐式类型转换使用。

static_cast还可以将void类型的指针转换为其他类型的指针

reinterpret含义是类型转换,意思是从一种类型转换到另一种类型,是不可移植,依赖底层编程

<>泛型的类型必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成原类型的指针,还可以得到原先的指针值)。

static_cast 与 reinterpret_cast

reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的。(这句话是C++编程思想中的原话)

示例代码:

在内存中的结构如图:

reinterpret_cast实例的内存

一般用法(需要把类型映射回原有类型时)

dynamic_cast是将一个基类对象指针(或引用)转换到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理。

如果泛型<>是类指针类型,那么实参也必须是一个指针;如果泛型<>是引用类型,那么实参也必须是一个引用。

注:为了满足多态性基类中必须有至少一个虚函数

如果一个类继承自两个类,那么这两个类之间也可以用dynamic_cast互转,前提是两个基类中至少一个虚函数

同理,情况适用于菱形继承
欢迎关注小弟的个人博客:knocked.github.io 求大佬指点!!不胜感激

 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-10-8 08:12 被Knocked编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (7)
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
感谢分享~
2019-10-7 21:10
0
雪    币: 6124
活跃值: (4661)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
不错不错,都9012年了在C++代码中应该抛弃C风格的类型转换。
2019-10-7 22:59
0
雪    币: 12628
活跃值: (3127)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
9102吧?
2019-10-8 13:11
1
雪    币: 188
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2019-10-11 15:39
0
雪    币: 8764
活跃值: (5240)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
感谢分享。。。
2019-10-12 11:07
0
雪    币: 8764
活跃值: (5240)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
学习收藏。
最后于 2019-10-12 13:16 被sunsjw编辑 ,原因:
2019-10-12 13:16
0
雪    币: 286
活跃值: (381)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
学习收藏了
2019-10-12 18:21
0
游客
登录 | 注册 方可回帖
返回
//