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

msi*_*erm 3 c c++

这是:

*(1 + &foo)
Run Code Online (Sandbox Code Playgroud)

这个一样吗?

*(&foo + 1)
Run Code Online (Sandbox Code Playgroud)

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

*(&(foo + 1))
Run Code Online (Sandbox Code Playgroud)

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

mgi*_*uca 9

是的,它们是等价的(第三个显然不是).

一元 &操作符比优先级高的二进制 +运算符(就像所有的一元运算符做),这样&foo + 1分析的(&foo) + 1.当你说它们具有相同的优先权时你想到的是一元运算 +符(它是一个不同的运算符)具有与一元相同的优先级&.

  • 在C中,它们是相同的,因为`+`是可交换的.在C++中,您可以定义自己的运算符,语义解释变得更加复杂.这就是为什么C++比C更邪恶的几个数量级的原因之一. (3认同)
  • 此外,[当你试图找到它时,你在谷歌中看到的有趣的东西](http://mattblr.tumblr.com/post/2969914346/o-kay-i-was-going-to-type-is-浮点). (2认同)