Undefined behavior, or: Does Swift have sequence points?

雨燕双飞 提交于 2019-11-29 20:21:19

问题


In C/C++, the second statement in

int i = 0;
int j = i++ + i++ + ++i;

invokes both

  • unspecified behavior, because the order of evaluation of operands is unspecified, and
  • undefined behavior, because the side effects on the same object i are unsequenced relative to each other.

See for example

  • Why are these constructs (using ++) undefined behavior?
  • Undefined behavior and sequence points

Now, given that Swift was designed as a safe language, what is the corresponding situation here? Is the result of

var i = 0
let j = i++ + i++ + ++i

well-defined? Can one conclude from the language reference in the Swift book that j == 4?


回答1:


The question was answered by Apple developer and Swift designer Chris Lattner in the Apple Developer Forum 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.

Chris also added:

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

Agreed! It was meant as an extreme example to demonstrate the problem.



来源:https://stackoverflow.com/questions/32705320/undefined-behavior-or-does-swift-have-sequence-points

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!