未定义的行为,或者:Swift是否有序列点?

时间:2015-09-21 22:11:28

标签: swift undefined-behavior sequence-points

在C / C ++中,

中的第二个语句
int i = 0;
int j = i++ + i++ + ++i;

调用两个

  • 未指定的行为,因为操作数的评估顺序 未指定,
  • 未定义的行为,因为对同一个对象i的副作用相对于彼此没有排序。

参见例如

现在,鉴于Swift被设计为安全语言,那是什么 相应的情况在这?是

的结果
var i = 0
let j = i++ + i++ + ++i

良好定义?可以从语言参考中得出结论 斯威夫特书j == 4

1 个答案:

答案 0 :(得分:6)

Apple开发人员和Swift设计师Chris回答了这个问题 Apple开发者论坛中的Lattner https://forums.developer.apple.com/thread/20001#63783

  

是的,该表达式的结果将始终为4. Swift评估   表达式从左到右,它不是未定义或实现   定义的行为,如C。

克里斯还补充说:

  

那就是说,如果你写这样的代码,有人试图维护它   你可能不会很开心

同意!这是一个证明问题的极端例子。