以下代码是否能正常运行,结果是?
package main
func main() {
v := new(int)
*v = 2
println(5/+-*v)
}
可以正常运行 运行结果为 -2
表达式解析
5/+-*v Go 语言的运算符优先级规则
unary_op = “+” | “-” | “!” | “^” | “*” | “&” | “<-” .
题中一元运算符(+、-、* )
+、- 和 * 同时也是算术运算符中的加、减和乘。
表达式: 5/+-v。5 后面 /,很显然,这是除法。 而 + 前面没有操作数,因此是一个一元运算符;同理 - 和 也是一元运算符。而一元运算符有最高的优先级,因此这个表达式优先计算 +-*v 的值。
在规范中有这么一句话:
对于整数操作数,一元运算符 + , - 和 ^ 有如下定义:(省略了 ^ 的解释) +x 是 0 + x -x 取其负值 是 0 - x
因此+-*v可以转化为 0+(0-(*v))
带入*v = 2 得 0+(0-(2))
因此结果变成了求 5/-2 的值
答案为 -2