【发布时间】:2011-08-26 18:43:32
【问题描述】:
阅读this主题后,我仍然有些困惑。以下 C++ 表达式 *d++ = ~(*d); 是否定义明确?是的,我知道这样的复合表达式很难看。。不是我写的。
当我将它与生成的程序集进行比较时,我发现它略有不同:
*d = ~(*d);
d++;
组装:
*d++ = ~(*d);
0x83384 LDR R3,[R0 <d>,4] <<diff
0x83388 ADD R1 <c>, R1 <c>, 1
0x8338c MVN R3, R3
0x83390 STR R3,[R0 <d>],4
对
*d = ~(*d);
d++;
0x83384 LDR R3,[R0 <d>]
0x83388 ADD R1 <c>, R1 <c>, 1
0x8338c MVN R3, R3
0x83390 STR R3,[R0 <d>],4
谢谢!
【问题讨论】:
-
所有汇编器都会告诉你这个特定编译器的这个特定版本对你在这个特定时间使用的设置做了什么。它没有说明标准保证或不保证的内容。
-
谢谢。我最初认为在这个问题的上下文中查看编译器生成的内容可能会有所帮助。我现在看到可能会生成任何东西(在未定义的情况下)。