在 C/C++ 中,第二条语句
int i = 0;
int j = i++ + i++ + ++i;
调用两者
-
未指定的行为,因为操作数的求值顺序
未指定,并且
-
未定义的行为,因为对同一个对象的副作用
i
彼此之间是无序的。
参见示例
- 为什么这些构造(使用 ++)是未定义的行为?
- 未定义的行为和序列点
现在,鉴于 Swift 被设计为safe语言,是什么
这里对应的情况是?的结果是
var i = 0
let j = i++ + i++ + ++i
定义明确?可以从语言参考中得出结论吗?
迅速预订j == 4
?
Apple 开发者兼 Swift 设计师 Chris 回答了这个问题
拉特纳在苹果开发者论坛上的发言https://forums.developer.apple.com/thread/20001#63783:
是的,该表达式的结果将始终为 4。Swift 计算
表达式从左到右,它不是未定义或实现
定义的行为如 C.
克里斯还补充道:
也就是说,如果你编写这样的代码,就会有人试图维护它
可能对你不太满意
同意!这是为了证明这个问题的一个极端例子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)