在偶然发现“为什么这些构造使用前增量和后增量未定义的行为? ”这个问题后,今天我决定获取下一个 C 标准的最新草案,并阅读更多关于它的信息。
在我在 C17 草案中发现以下段落后不久:
表达式是一系列运算符和操作数,它们指定值的计算,或指定对象或函数,或产生副作用,或执行它们的组合。运算符的操作数的值计算在运算符结果的值计算之前排序
来源:ISO/IEC 9899:2017,第 6.5 节第 1 节“表达式”(链接断开使用web.archive.org)
现在我有点困惑。这不意味着这i = i++
是定义的行为吗?我看了另一个草稿,这次是 C99:
表达式是一系列运算符和操作数,它们指定值的计算,或指定对象或函数,或产生副作用,或执行它们的组合。
来源:ISO/IEC 9899:1999,第 6.5 §1 节“表达式”
就是少了那句话!
问题
- 我是不是误会了什么?
- 答案是否已过时?
- 我看错草稿了吗?
注意:这个问题是相关的,但它是关于 C++ 的。