类型转换
来源:互联网 发布:centos中文 编辑:程序博客网 时间:2024/05/21 22:59
C风格的类型转换:
风格:var=(type)var
C++类型转换
static_cast:
static_cast类型转换用于相关类型之间的转换,诸如:在同一个类的继承层次关系中,向上或向下转换;枚举类型与整数类型之间的转换;浮点类型与指数类型之间的转换。
const_cast:
用于消除变量的const限定,转换之后的变量就不再具有“const”了,如果是一个const指针的话,转换之后可以改变指向而指向其它对象。
dynamic_cast:
一种运行时(run-time)检测的类型转换,因此转换可能需要较大的运行时代价,这种类型也是用C-style是无法实现的。主要用于执行类型向下转换和继承之间的转换。
reinterpret_cast:
它主要用于不相关类型之间的转换,好一个英文单词在不同的上下文中,词性和词义可能完全不同。它为不同类型之间转换带来的便利,但是也伴随着风险的,如将一个十六进制整数转换为内存地址(由int-->指针类型,这两种类型完全不关联)。既然是用于不相关类型之间的转换,也就意味着编译器不会做太多的确认和承诺。
reinterpret_cast方式还有一个特点就是:目标和原始值之间至少有相同的位数,我们可以将转换之后的值再转换回去,而不像其它3种类型可能会导致精度丢失。
总结:
在一个大型程序中更难定位和识别
哪种类型转换并不明显
而用上面的四种方式可以更加准确地定位哪种类型转换发生了错误。
对于继承体系中的指针转换,可以由编译器实现指针的偏移。
用C-style的(Type)expression的格式转换,可以用我们上面介绍的4种方式来替代。虽然C++中可以使用C-style的形式仍可用,但更加建议使用上面的4中类型。因为C-style的类型转换更加危险:
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 类型转换
- 让托盘弹出菜单失去焦点时自动消失
- C#获取当前路径的方法集合
- SWT/AWT 容器or截屏导出到图片
- 年初调整,应对方法
- DP方程100个
- 类型转换
- 数据库基本----SQL语句大全
- Linux简单Socket编程示例
- shell入门(一)
- 动态链接库(.so)
- C#窗体间传递控件参数
- AS3 Starling extends Particle System 分析
- ubuntu10.04 shell编程 if-else条件判定出现unexpected operator错误
- Java中的synchronized、Object.wait()、Object.notify()/notifyAll()的使用