Mar*_*n R 6 undefined-behavior sequence-points swift
在C/C++中,第二个语句在
int i = 0;
int j = i++ + i++ + ++i;
Run Code Online (Sandbox Code Playgroud)
调用两者
i相对于彼此是无序的.例如,参见
现在,鉴于Swift被设计为一种安全的语言,这里的相应情况是什么?结果是
var i = 0
let j = i++ + i++ + ++i
Run Code Online (Sandbox Code Playgroud)
明确界定?可以从Swift书中的语言参考中得出结论j == 4吗?
Apple开发人员和Swift设计师Chris Lattner在Apple开发者论坛https://forums.developer.apple.com/thread/20001#63783回答了这个问题:
是的,该表达式的结果将始终为4. Swift从左到右计算表达式,它不是未定义的或实现定义的行为,如C.
克里斯还补充说:
也就是说,如果你编写这样的代码,那么试图维护它的人可能会对你不满意
同意!这是一个证明问题的极端例子.
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |