在C/C++中,中的第二条语句
int i = 0;
int j = i++ + i++ + ++i;
调用两个
- 未指定的行为,因为操作数的求值顺序未指定,并且
- 未定义的行为,因为同一对象
i
上的副作用是相对于彼此未排序的
参见示例
- 为什么这些构造(使用++(是未定义的行为
- 未定义的行为和序列点
现在,考虑到Swift被设计为安全语言这里的相应情况?是的结果吗
var i = 0
let j = i++ + i++ + ++i
定义明确?一个人能从中的语言参考得出结论吗Swift book that j == 4
?
这个问题由苹果开发者和Swift设计师Chris回答Lattner在苹果开发者论坛https://forums.developer.apple.com/thread/20001#63783:
是的,该表达式的结果将始终为4。Swift评估表达式从左到右,它不是未定义的或实现的定义的行为,如C.
Chris还补充道:
也就是说,如果你写这样的代码,就会有人试图维护它可能不会对你很满意
同意!这是一个极端的例子来证明这个问题。