reinterpret_cast是否会改变指针的值?

时间:2017-01-31 12:24:03

标签: c++ pointers alignment

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相同。

这种承诺对于我们审查的某些代码的正确性和可移植性非常重要。

1 个答案:

答案 0 :(得分:2)

根据C ++标准,它不安全:

  

5.2.10重新解释演员
   [...]
   3 [注意:reinterpret_cast执行的映射可能或可能   不,产生不同于原始值的表示。 -   结束说明]

但实际上我不希望reinterpret_cast返回另一个值。