在《C++无所畏惧:让你感觉聪明的初学者指南》一书中,在第(8)章中,它提到了以下关于reinterpret_cast
....从一种指针类型 (int ) 转换为另一种 (char*)。因为转换改变了数据指向的解释方式,所以它被称为 reinterpret_cast,而不是 static_cast。*
你能在这里描述一下这一段吗?特别是操作命名方式的原因?
谢谢。
在《C++无所畏惧:让你感觉聪明的初学者指南》一书中,在第(8)章中,它提到了以下关于reinterpret_cast
....从一种指针类型 (int ) 转换为另一种 (char*)。因为转换改变了数据指向的解释方式,所以它被称为 reinterpret_cast,而不是 static_cast。*
你能在这里描述一下这一段吗?特别是操作命名方式的原因?
谢谢。
基本上,reinterpret_cast
将特定位置的位模式重新解释为不同的类型。
reinterpret_cast 操作符产生一个新类型的值,它的位模式与其参数相同。
Astatic cast
转换参数,而不仅仅是重新解释它。您可以通过 static_casting an int
tofloat
和 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) 也是如此) .