这是:
*(1 + &foo)
与此相同?
*(&foo + 1)
'+'和'&'具有相同的优先级,并从右到左进行评估。但是你无法解释第二种情况:
*(&(foo + 1))
...因为你只能使用'&'带有l值(如果你这样编写,它甚至都不会编译)。它会是垃圾吗?或者它会安全地弄清楚你的意思吗?
答案 0 :(得分:9)
是的,它们是等价的(第三个显然不是)。
一元 &
运算符的优先级高于二进制 +
运算符(正如所有一元运算符所做的那样),因此{{1} }解析为&foo + 1
。当你说他们具有相同优先权时你想到的是一元 (&foo) + 1
运算符(这是一个不同的运算符)has the same precedence as一元+
。
答案 1 :(得分:1)
是的,它们是一样的。请注意,二进制文件+
的低于优先级高于&
。您可能正在考虑一元 +
。
答案 2 :(得分:1)
如the Wikipedia page所示,&
和+
在将+
解释为一元运算符时仅具有相同的优先级,例如a - +b
}。
将+
解释为二元运算符时,其优先级低于&
,因此第二种情况将被解释为*((&foo) + 1)
而不是*(&(foo + 1))
。< / p>