在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
不会帮你在这里。
来源
2010-02-05 09:30:04
AnT
我从来没有在C++中试过这个,所以我只是猜测。它是否工作,如果你投的浮动?难道不是这两种类型的位长不同? – 2010-02-05 06:13:19
“'reinterpret_cast(x)'”你预计这个表达要做什么? –
curiousguy
2012-07-25 15:58:08
int是32位。双是64位。这可能是问题。你可以检查一下吗? – 2012-09-23 16:27:37