Go101 发布的一条 twitter。以下代码是否能正常运行,结果是? 下面代码输出什么?
package main
func main() {
v := new(int)
*v = 2
println(5/+-*v)
}
参考答案及解析:B。
Go 中有如下几个一元运算符
unary_op = "+" | "-" | "!" | "^" | "*" | "&" | "<-" .
因此会先计算 5/+-*v 又因为规范
对于整数操作数,一元运算符 + , - 和 ^ 有如下定义:(省略了 ^ 的解释) +x 是 0 + x -x 取其负值 是 0 - x
因此转化后 5 / [0+(0-*v)] 、 5 / -2
又因为强制类型转换 -2.5 成了 -2