我最近浏览了 Go 的“语言规范” https://golang.org/ref/spec#Order_of_evaluation,但发现评估的顺序与本文档中解释的不同。例如,它说:a := 1f := func() int { a++; return a }x := []int{a, f()} // x may be [1, 2] or [2, 2]: evaluation order between a and f() is not specified然后我尝试使用此代码:package mainimport "fmt"func main() { for { result := evaluate() if result == 1 { break } } }func evaluate() int { a := 1 f := func() int { a++; return a } x := []int{a, f()} fmt.Println(x) return x[0]}我发现切片 x 的值总是 [2,2]。我有什么误解吗?
1 回答
慕容森
TA贡献1853条经验 获得超18个赞
“未指定”命令意味着由编译器决定,并且不能保证在不同版本的编译器/其他编译器等/其他机器/一天中的其他时间等上是相同的。
这并不意味着每次或崩溃时它都必须不同(正如您可能习惯于从 C 中看到的那样,其中“未定义行为”通常意味着一些不好的事情,例如在释放内存后使用指针)
- 1 回答
- 0 关注
- 126 浏览
添加回答
举报
0/150
提交
取消