繁体   English   中英

reinterpret_cast

[英]reinterpret_cast

C++ without Fear: A Beginner's Guide That Makes You Feel Smart一书中,在第 (8) 章中,提到了以下关于reinterpret_cast

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

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

谢谢。

基本上, reinterpret_cast将特定位置的位模式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 cast转换会转换参数,而不仅仅是重新解释它。 您可以通过 static_casting an int to float和 reinterpret_casting an int to float来尝试这个。 结果将完全不同。

这里没什么好看的。 它真的只是想重新解释一些东西。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM