C++ 重新解释

C++ 重新解释,c++,casting,reinterpret-cast,C++,Casting,Reinterpret Cast,在《无惧C++入门指南:让你感觉聪明》一书中,在第(8)章中,它提到了以下关于reinterpret\u cast ..从一种指针类型(int)转换为另一种指针类型(char*)。因为强制转换改变了指向的数据的解释方式,所以它被称为reinterpret_cast,而不是static_cast* 你能描述一下这一段吗?特别是操作命名方式的原因 谢谢。基本上,将特定位置的位模式重新解释为不同的类型 请参见此处的示例: reinterpret_cast运算符生成一个新类型的值,该值具有 与其参数相同

在《无惧C++入门指南:让你感觉聪明》一书中,在第(8)章中,它提到了以下关于
reinterpret\u cast

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

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


谢谢。

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

请参见此处的示例:

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


static cast
转换参数,而不仅仅是重新解释它。您可以通过将
int
强制转换为
float
并将
int
强制转换为
float
来尝试这一点。结果将完全不同。

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

根据标准5.3.10,reinterpret_cast旨在满足以下情况:

  • 指针可以显式转换为任何足以容纳它的整数类型
  • 整数类型或枚举类型的值可以显式转换为指针
  • 指向函数的指针可以显式转换为指向不同类型函数的指针
  • 指向对象的指针可以显式转换为指向不同对象类型的指针
  • 有条件地支持将函数指针转换为对象类型指针或将对象类型指针转换为函数指针
  • 空指针值(4.10)转换为目标类型的空指针值
  • 如果T1和T2都是函数类型或对象类型,则类型为“指向T1类型的X的成员的指针”的prvalue可以显式转换为不同类型的prvalue“指向T2类型的Y的成员的指针”
  • 如果“指针到T1”类型的表达式可以使用重新解释转换显式转换为“指针到T2”类型,则T1类型的左值表达式可以转换为“引用到T2”类型。也就是说,引用转换reinterpret_cast(x)与使用内置&和*运算符的转换*reinterpret_cast(&x)具有相同的效果(对于reinterpret_cast(x)也是如此)

这是一本书的好名字!试着读这篇文章:今天从这本书中引出了另一个问题,它最终做了任何事情,但没有让OP感到聪明。啊,哈,是你。真遗憾,你选择不接受我的建议去买一个真正的。@Joe:这个名字我从来没听说过。也许我在这里过于保守,但如果不推荐,我是个怀疑论者。C++是一种非常复杂的野兽,复杂到有几百本书把基本事实弄错了。我不会建议任何一本不被社区(有经验的部分)推荐的C++书。你犯了一个错误——标准中的段落5.2.10(你写的5.3.10)不是允许从修改到修订的数字,BTW?它不一定具有相同的位模式。标准中很少有关于重新解释铸造的保证。5.2.10/3说,“由
重新解释
执行的映射是实现定义的。[注:它可能会,也可能不会产生与原始值不同的表示形式。]”此外,
重新解释
也不能将
int
转换为
浮点
(它可以将
int*
转换为
浮点*
)。任何执行该强制转换的实现都违反了标准(5.2.10/1,最后一句),尽管它可能是一个足够常见的扩展。