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

Undefined behavior, or: Does Swift have sequence points?

在C/C++中,

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

同时调用两者

例子见

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

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

定义明确?可以从中的语言参考中得出结论吗? Swift 预订 j == 4?

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

Yes, the result of that expression will always be 4. Swift evaluates expressions left to right, it isn't undefined or implementation defined behavior like C.

克里斯还补充道:

That said, if you write code like that, someone trying to maintain it will probably not be very happy with you

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