在C / C ++中,*(1 +& foo)与*(& foo + 1)相同?

时间:2011-01-26 23:59:30

标签: c++ c

这是:

*(1 + &foo)

与此相同?

*(&foo + 1)

'+'和'&'具有相同的优先级,并从右到左进行评估。但是你无法解释第二种情况:

*(&(foo + 1))

...因为你只能使用'&'带有l值(如果你这样编写,它甚至都不会编译)。它会是垃圾吗?或者它会安全地弄清楚你的意思吗?

3 个答案:

答案 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>