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

前端之家收集整理的这篇文章主要介绍了未定义的行为,或者:Swift是否有序列点?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在C/C++中,第二个声明在
int i = 0;
int j = i++ + i++ + ++i;

调用两者

>未指定的行为,因为操作数的评估顺序
是未指定的,并且
>未定义的行为,因为对同一对象的副作用我相对于彼此没有排序.

例如,参见

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

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

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

明确界定?可以从语言参考中得出结论
swift书j == 4?

Apple开发人员和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

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

原文链接:https://www.f2er.com/swift/320180.html

猜你在找的Swift相关文章