是否有任何reinterpret_cast改变指针值的真实例子?

sha*_*oth 10 c++ compiler-construction casting

根据C++标准,一个reinterpret_cast指向T*其他类型指针的指针Q* 可以根据实现改变或不改变指针值.

我很感兴趣 - 它有一个C++实现的真实例子,其中通过reinterpret_cast更改指针来转换指向其他指针类型的指针?什么和为什么改变了?

Dav*_*eas 6

请注意,当标准声明它可以或不可能执行某些操作时,并不意味着存在任何具有该行为的当前实现,只是它们可以执行.

我能想到的最接近的是一个架构,其中硬件需要类型对齐,以及一个决定在需要时纠正对齐的实现.就像是:

aligned8 var;
aligned1 *p = reinterpret_cast<aligned1*>(&var);
aligned1 *q = p + 1; // assuming aligned 1 size is not multiple of 8
aligned8 *a = reinterpret_cast<aligned8*>(q); // [1]
Run Code Online (Sandbox Code Playgroud)

可能需要a要成为有效指针,它必须寻址8的内存位置,而q具有较小对齐要求的参数可以指向任何内存地址.