为什么C / C ++没有定义表达式评估顺序?

问题描述 投票:1回答:2

您可能知道C / C ++没有指定表达式评估顺序。是什么原因让他们不明确。

c++ c expression evaluation
2个回答
4
投票

它允许编译器优化。一个示例是重新排序算法指令以最大限度地使用ALU或通过计算隐藏存储器等待时间。


1
投票

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

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

来源:Steve Summit的C编程常见问题解答

© www.soinside.com 2019 - 2024. All rights reserved.