reinterpret_cast的

时间:2011-01-20 14:21:35

标签: c++ reinterpret-cast

C ++ Without Fear:一本让你感觉聪明的初学者指南一书中,在第(8)章中,它提到了以下关于reinterpret_cast

的内容。

....从一个指针类型(int )转换为另一个指针类型(char *)。因为强制转换会改变指向数据的方式,所以它被称为reinterpret_cast,而不是static_cast。*

你能在这里描述这一段吗?特别是操作命名方式的原因是什么?

感谢。

3 个答案:

答案 0 :(得分:6)

基本上,reinterpret_cast将特定位置的位模式重新解释为不同的类型。

例如,请参见:http://publib.boulder.ibm.com/infocenter/lnxpcomp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7l.doc%2Flanguage%2Fref%2Fclrc05keyword_reinterpret_cast.htm

“reinterpret_cast运算符生成一个与其参数具有相同位模式的新类型的值。”

静态强制转换会转换参数,而不仅仅是重新解释它。你可以通过static_casting和int来试试这个浮动和重新解释为一个int来浮动。结果将完全不同。

答案 1 :(得分:4)

这里没什么特别的。它只是想重新解释一些东西。

从标准5.3.10开始,reinterpret_cast旨在满足以下情况:

  
      
  • 指针可以显式转换为足以容纳它的任何整数类型。
  •   
  • 可以将整数类型或枚举类型的值显式转换为指针。
  •   
  • 指向函数的指针可以显式转换为指向不同类型函数的指针。
  •   
  • 指向对象的指针可以显式转换为指向不同对象类型的指针。
  •   
  • 有条件地支持将指向函数的指针转换为指向对象类型的指针,反之亦然。
  •   
  • 空指针值(4.10)将转换为目标类型的空指针值。
  •   
  • 如果T1和T2都是函数类型或两种对象类型,则可以将“指向类型T1的X成员的指针”类型的prvalue显式转换为不同类型的prvalue“指向类型为T2的Y的成员的指针”
  •   
  • 如果可以使用reinterpret_cast将“指向T1的指针”类型的表达式显式转换为“指向T2的指针”类型,则可以将类型T1的左值表达式强制转换为“对T2的引用”。也就是说,参考演员reinterpret_cast< T&安培; >(x)具有与转换相同的效果* reinterpret_cast< T *>(& x)内置&和*运算符(类似于reinterpret_cast< T&&>(x))。
  •   

答案 2 :(得分:2)