reinterpret_cast是否真的不会更改它所投射的指针的值,即使新指针是非法指针:
char * charbuffer = ....//charbuffer is a buffer we allocated.
int * Ptr=reinterpret_cast< int *>(charbuffer+17);//Ptr should be illegal due to mis-aligment
我假设即使charbuffer+17
指向的地址(char *
指针类型)由于未对齐而存储int类型的值是非法的,仍然指向ptr get by reinterpret_cast与charbuffer+17
相同的内存地址?
请注意,我们并不关心它所指向的内容,我们只是想确保此指针所代表的内存地址与charbuffer+17
相同。
这种承诺对于我们审查的某些代码的正确性和可移植性非常重要。
答案 0 :(得分:2)
根据C ++标准,它不安全:
5.2.10重新解释演员
[...]
3 [注意:reinterpret_cast执行的映射可能或可能 不,产生不同于原始值的表示。 - 结束说明]
但实际上我不希望reinterpret_cast
返回另一个值。