为了账号安全,请及时绑定邮箱和手机立即绑定

切片文字中的求值顺序

切片文字中的求值顺序

Go
弑天下 2021-11-29 15:56:19
我最近浏览了 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 中看到的那样,其中“未定义行为”通常意味着一些不好的事情,例如在释放内存后使用指针)


查看完整回答
反对 回复 2021-11-29
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信