https://go.dev/play/p/BrcEX_1Nu3D
求值顺序应该先求出 a,然后调用 alterA(&a)返回 a 的指针取地址求值再进行比较,但看起来是执行完 alterA(&a)函数后,再对 a 求值,所以打印出了"oh,righ"
1
lesismal 2023-08-23 23:56:12 +08:00
表达式里含有子表达式这种,通常是要先计算子表达式吧,如果多个子表达式、c 里好像是不规定多个子表达式的先后顺序而是依赖编译器厂商实现。
go 的表达式规则我没细看,但是 OP 这段代码如果按照先计算子表达式,并且编译器推断那就是对比 a==a ,所以编译器直接可以优化了,看下反汇编的代码就优化掉了的: https://gist.github.com/lesismal/71a96904de3a878c6ff27dd36e8fd4af |