提问者:小点点

reinterpret_cast可以改变对象表示吗?



共1个答案

匿名用户

这里有一个例子:如果你读到第4个要点:

指针可以显式转换为任何大到足以容纳其类型的所有值的整数类型。映射函数是实现定义的。[注:意在对那些了解底层机器寻址结构的人来说并不奇怪。--结尾注]

现在,是实现定义的,这里的i的值是什么:

void *ptr = <some valid pointer value>;
uintptr_t i = reinterpret_cast<uintptr_t>(ptr);

char*int*在Cray T90上具有不同的表示形式,因此:

int *i = <some int pointer value>;
char *c = reinterpret_cast<char *>(i);

这里,ic在Cray T90上的表示形式不同(并且执行此转换肯定使用CPU指令)。

(我已经验证了这一点,Cray C/C++参考手册SR-2179 2.0第3.1.2.7.1章)