在C / C ++中,
中的第二个语句int i = 0;
int j = i++ + i++ + ++i;
调用两个
i
的副作用相对于彼此没有排序。参见例如
现在,鉴于Swift被设计为安全语言,那是什么 相应的情况在这?是
的结果var i = 0
let j = i++ + i++ + ++i
良好定义?可以从语言参考中得出结论
斯威夫特书j == 4
?
答案 0 :(得分:6)
Apple开发人员和Swift设计师Chris回答了这个问题 Apple开发者论坛中的Lattner https://forums.developer.apple.com/thread/20001#63783:
克里斯还补充说:是的,该表达式的结果将始终为4. Swift评估 表达式从左到右,它不是未定义或实现 定义的行为,如C。
那就是说,如果你写这样的代码,有人试图维护它 你可能不会很开心
同意!这是一个证明问题的极端例子。