免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3301 | 回复: 11
打印 上一主题 下一主题

标准C++类型转换-------高手进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-22 10:55 |只看该作者 |倒序浏览
本帖最后由 csoftman 于 2012-05-22 11:31 编辑

学习标准C++类型转换的时候,四种转换:
static_cast
dynamic_cast
const_cast
reindivter_cast
学习了一阵子了,还是糊里糊涂的,不清除具体的用法,求CU里C++高手给白话总结下这四个转换的用法,不要粘贴,网上帖子很多,我想要最精炼的总结!

不好意思写错了 是reinterpret_cast,高手过来总结下啊!

论坛徽章:
0
2 [报告]
发表于 2012-05-22 10:56 |只看该作者
自己顶个,不要沉了啊

论坛徽章:
0
3 [报告]
发表于 2012-05-22 10:57 |只看该作者
没有 reindivter_cast

论坛徽章:
0
4 [报告]
发表于 2012-05-22 11:12 |只看该作者
reindivter_cast   ->   reinterpret_cast

论坛徽章:
0
5 [报告]
发表于 2012-05-22 13:01 |只看该作者
static_cast    基本类型间的转换
dynamic_cast    类族间的转换
const_cast    取消常量性的转换
reindivter_cast    看你写的这么随意,那这个就是随意转换吧。

论坛徽章:
0
6 [报告]
发表于 2012-05-22 13:27 |只看该作者
static_cast<T>(expr) 类似 (T)expr 的显式转换,但是不能用于
1. ptr/ref of derived class to ptr/ref of base class,
2. const to non-const, volatile to non-volatile
3. array to pointer,
4. function to pointer,
5. lvalue to rvalue

dynamic_cast<T>(expr) 主要用于 ptr/ref of derived class to ptr/ref of base class,不能用于
1. null pointer conversion
2. const to non-const, volatile to non-volatile
static_cast 限制里的3 - 5条应该也不准

const_cast<T>(expr) 主要用于 const to non-const, volatile to non-volatile,而且允许static_cast限制里的3 - 5.

reinterpret_cast<T>(expr) 与上面三个不同在于:它和(T)expr行为非常不同,它直接将内存区块按新类型解释,而且允许static_cast限制里的3 - 5.

论坛徽章:
0
7 [报告]
发表于 2012-05-22 13:31 |只看该作者
补充一点:reinterpret_cast先尝试进行
3. array to pointer,
4. function to pointer,
5. lvalue to rvalue
这三个转换,然后再重新解释。不能用于 const to non-const, volatile to non-volatile

论坛徽章:
0
8 [报告]
发表于 2012-05-22 14:02 |只看该作者
更正一下:

3. array to pointer,
4. function to pointer,
5. lvalue to rvalue

这三个转换是标准转换。任何必要的地方,标准转换都可以进行。

所以static_cast 和 const_cast都可以进行这三个转换

论坛徽章:
0
9 [报告]
发表于 2012-05-22 15:24 |只看该作者
sonicling 发表于 2012-05-22 13:27
static_cast(expr) 类似 (T)expr 的显式转换,但是不能用于
1. ptr/ref of derived class to ptr/ref of  ...


:wink:

论坛徽章:
0
10 [报告]
发表于 2012-05-22 15:31 |只看该作者
回复 1# csoftman


    去const用const_cast,否则就用static_const
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP