1

您可能知道 C/C++ 没有指定表达式求值顺序。什么是未定义的原因。

4

2 回答 2

5

它允许编译器优化。一个例子是重新排序算术指令以最大限度地使用 ALU 或通过计算隐藏内存延迟。

于 2009-08-01T15:09:07.223 回答
0

C/C++ 设计目标之一是编译器的高效实现。因此编译器在选择复杂表达式中各种子表达式的求值顺序时相对自由;这个顺序不受我们认为的运算符优先级和关联性的限制。在这种情况下,当我们在多个子表达式中修改同一个变量时,行为变得不可抗拒。不保证在放弃前一个值之后以及在计算表达式的任何其他部分之前立即执行递增或递减操作。唯一的保证是更新将在表达式被认为完成之前执行。

未定义的行为意味着未定义,任何事情都可能发生

来源:Steve Summit 的 C programmig FAQ

于 2017-12-25T15:05:46.037 回答