我知道 reinterpret_cast
是危险的,我这样做只是为了测试它。我有以下代码:
int x = 0;
double y = reinterpret_cast<double>(x);
当我尝试编译程序时,它给了我一个错误提示
invalid cast from type 'float' to type 'double
发生了什么事?我认为 reinterpret_cast
是你可以用来将苹果转换为潜艇的流氓 Actor ,为什么这个简单的 Actor 不能编译?
最佳答案
在 C++ 中,reinterpret_cast
只能执行一组特定的转换,在语言规范中明确列出。简而言之,reinterpret_cast
只能执行指针到指针的转换和引用到引用的转换(加上指针到整数和整数到指针的转换)。这与转换名称中表达的意图一致:它旨在用于指针/引用的重新解释。
你想要做的不是重新解释。如果您想将 int
重新解释为 double
,则必须将其转换为引用类型
double y = reinterpret_cast<double&>(x);
虽然等效的基于指针的重新解释可能更明确
double y = *reinterpret_cast<double*>(&x); // same as above
请注意,虽然 reinterpret_cast
可以转换引用/指针类型,但实际尝试通过生成的引用/指针读取数据会产生未定义的行为。
在任何情况下,这当然在具有不同大小的 int
和 double
的平台上没有多大意义(因为如果 double
你将读取超出 x
占用的内存)。
所以,最终这一切都归结为您想要实现的目标。内存重新诠释?看上面。某种更有意义的 int
到 double
转换?如果是这样,reinterpret_cast
在这里帮不了你。
关于c++ - 为什么这个 reinterpret_cast 不编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2205353/