以下代码是否能正常运行,结果是?

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