【发布时间】:2013-11-23 17:37:46
【问题描述】:
以下代码是未定义的行为、实现是否由标准定义或定义? 我找不到任何关于将整数分配给它自己的地址的参考。
volatile int x = (int)&x;
这段代码被翻译成:
lea eax,[ebp-4]
mov dword ptr [ebp-4],eax
【问题讨论】:
-
我认为这归结为如何处理将地址转换为整数。我认为它存储在整数本身中的事实无关紧要。
-
x的值将由实现定义,只要int至少与int *一样宽;就像您使用reinterpret_cast从指针转到int一样。 -
我会说它是实现定义的。在某些平台上,
int可能无法保存指针(地址)的值。例如,具有 24 位寻址的 16 位字系统。 -
著名的 C/C++ 标准?
-
@DieterLücking 这不是重复的。我在询问编译器在将其自己的地址分配给本地整数时的行为,而您所指的问题涉及将地址作为参数提供给函数