//Post and Pre-Increment Test
func FindValueOFC() -> String
{
var a : Int = 10
var b : Int = 20
var c = a++ + a++ + b++ + b++ + ++a + ++b
return "The value Of variable C is \(c)"
}
let whatsTheValueOfC = FindValueOFC()
println(whatsTheValueOfC)为什么这个程序会打印出The value Of variable C is 98?逻辑上应该是96,因为a++ + a++ + b++ + b++ + ++a + ++b可以转换为10+11+20+21+12+22 = 96
发布于 2014-08-06 11:29:43
请不要在一个真正的程序中这样做。当您在同一个表达式中混合多个变异器时,它会导致未定义的行为。在该语言中,没有任何东西可以保证在访问值之前立即发生增量前操作符,或者在访问变量之后立即发生增量后运算符。
编译器可以先完成a和b的预增量,然后将所有的值加起来,然后应用后增量。这会给出以下结果
11 + 11 + 21 + 21 + 11 + 21 = 96关键是,许多答案是可能的和有效的,因此名称未定义的行为。您可能会得到不同级别的编译器优化的不同答案,这可能会导致您的应用程序的测试版本和发布版本之间非常令人费解的差异。
https://stackoverflow.com/questions/25156236
复制相似问题