我想将unsigned long (实际上是DWORD)重新解释为signed long。我试过了:
DWORD x;
long y = reinterpret_cast<signed long>(x);然而,VC++2010智能提示告诉我“无效的类型转换”。为什么?我该如何修复它?
发布于 2011-07-15 23:24:14
请尝试使用static_cast。如果您尝试过度许可的强制转换(比如在static_cast或const_cast就足够时使用reinterpret_cast ),VC会生成一个错误。
C++中有5种类型的强制转换,每种类型都允许您执行更多操作(授予更多权限)。最不允许的强制转换是常量强制转换(const_cast<int>(<const int>)),它允许您更改常量修饰符。静态类型转换(static_cast<int>)(<short>))允许您执行类型安全强制转换(例如,从基础类型转换为派生类型).There是动态类型转换(dynamic_cast<derived_type>(base_type),如果两者之间存在合法转换,则允许您从一种类型转换为另一种类型,如果没有转换,则返回null )。最后,还有一些类型转换允许在不相关的类型之间进行转换-- reinterpret_cast reinterpret_cast<int>(<void *>)和C样式转换(int)<void *>。
我没有一个好的方法来描述这些不同类型的强制转换,所以我将它们描述为“更宽松的”,因为它们每一个都允许你做更多的事情。
如果您正在使用重新解释强制转换,则VC会警告您,其他强制转换类型中的一个可能更适合实现您的目标。C风格的类型转换没有类似的向后兼容性警告。
发布于 2011-07-15 23:23:48
您不需要使用reinterpret_cast将无符号类型转换为有符号类型,static_cast就可以了。
https://stackoverflow.com/questions/6709356
复制相似问题