sha*_*oth 10 c++ compiler-construction casting
根据C++标准,一个reinterpret_cast
指向T*
其他类型指针的指针Q*
可以根据实现改变或不改变指针值.
我很感兴趣 - 它有一个C++实现的真实例子,其中通过reinterpret_cast
更改指针来转换指向其他指针类型的指针?什么和为什么改变了?
请注意,当标准声明它可以或不可能执行某些操作时,并不意味着存在任何具有该行为的当前实现,只是它们可以执行.
我能想到的最接近的是一个架构,其中硬件需要类型对齐,以及一个决定在需要时纠正对齐的实现.就像是:
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
具有较小对齐要求的参数可以指向任何内存地址.