[提问C++ Primer]四种 cast 有何习惯用法

standlove 2002-11-27 07:43:18
能不能介绍一下四种 cast 的习惯用法,总觉得现在实在用不到,普通的类型转换,旧的一套就够用了,何况还有隐式转换呢!

诸位发表一下意见:
static_cast 、dynamic_cast 、const_cast 、reinterpret_cast 。

偶知道const_cast是用来去掉变量的const属性(不知道这么说准不准确)
reinterpret_cast好象是从字节的意义上重新解释内存数据,比如将void*转换成char*
static_cast跟一般的强制类型转换没有什么差别。

不知道以上看法正确与否,请大家指正。thx
...全文
44 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinside99 2002-11-30
  • 打赏
  • 举报
回复

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_pluslang_casting.asp

这里有例子,也蛮详细的,看看!
standlove 2002-11-29
  • 打赏
  • 举报
回复
大家能否贴几个自己编程过程中实实在在用到的例子出来? thx

to jinside99:
最后一个应该是dynamic_cast吧。。。
jinside99 2002-11-29
  • 打赏
  • 举报
回复
reinterpret_cast允许任意指针转换到其他类型的指针,以及允许任意整数类型与指针类型间转换。reinterpret_cast是一个为执行低级操作而提供的运算符,通常用于做依赖于实现的转换。
而用const_cast转换后可以获得对const或者volatile的数据的访问权。
static_cast用于例如从Base*到Derived*的转换,可把它看成隐含转换的显式逆运算。
saner 2002-11-27
  • 打赏
  • 举报
回复
static_cast在功能上基本上与C风格的类型转换一样强大,含义也一样。它也有功能上限制。例如,你不能用static_cast象用C风格的类型转换一样把struct转换成int类型或者把double类型转换成指针类型,另外,static_cast不能从表达式中去除const属性,因为另一个新的类型转换操作符const_cast有这样的功能。

const_cast用于类型转换掉表达式的const或volatileness属性。通过使用const_cast,你向人们和编译器强调你通过类型转换想做的只是改变一些东西的constness或者 volatileness属性。这个含义被编译器所约束。如果你试图使用const_cast来完成修改constness 或者volatileness属性之外的事情,你的类型转换将被拒绝。

dynamic_cast它被用于安全地沿着类的继承关系向下进行类型转换。这就是说,你能用dynamic_cast把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且你能知道转换是否成功。失败的转换将返回空指针(当对指针进行类型转换时)或者抛出异常(当对引用进行类型转换时)。

reinterpret_cast。使用这个操作符的类型转换,其的转换结果几乎都是执行期定义(implementation-defined)。因此,使用reinterpret_casts的代码很难移植。reinterpret_casts的最普通的用途就是在函数指针类型之间进行转换。
xxxyyyuuu 2002-11-27
  • 打赏
  • 举报
回复
static_cast<T>(exp)
用于执行int 到 double之间的转换
dynamic_cast<T>(exp)
用于执行向下转换和在继承之间的转换。如:类x继承于类o,那么类o的指针可以转化为类x的指针,只要转换是有效的即可。
const_cast<T>(exp)
这是唯一能影响表达是的const性质或可变性质的转换。
reinterpret_cast<T>(exp)
用于执行并不安全的orimplmentation_dependent类型转换,旨在没有别的办法时使用。
standlove 2002-11-27
  • 打赏
  • 举报
回复
大家能不能举几个典型的例子具体说明一下。。
xspf 2002-11-27
  • 打赏
  • 举报
回复
const_cast:用于常量和变量(const和volatile)之间的映射
dynamic_cast:用于向下映射(基类到派生类)
reinterpret_cast:在比特级,映射到完全不同的类型
black_fox 2002-11-27
  • 打赏
  • 举报
回复
dynamic_cast :The value of a failed cast to pointer type is the null pointer. A failed cast to reference type throws a bad_cast exception.

standlove 2002-11-27
  • 打赏
  • 举报
回复
忘了说了,不清楚dynamic_cast 到底是干什么用的?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧