*= b + c扩展到什么?

use*_*874 3 c++ standards

研究标准没有关于如何扩展的信息.我在visual studio 2008中尝试过,它确实是a = a*(b + c); 标准是否保证它将始终扩展到那个而不是a = a*b + c?这总是表达式扩展到所有c ++标准版本的方式吗?

谢谢.

Eri*_*rik 16

是的,它是有保证的.

a::operator*=(b + c);
Run Code Online (Sandbox Code Playgroud)

编辑:

优先级没有列在标准的一个很好的表中,有一个脚注5/4说:

运算符的优先级不是直接指定的,但可以从语法中派生.

但是,C++ Reference表是正确的.

  • @FredOverflow:它说明了优先顺序 - 内置类型的顺序是相同的,即使这种语法对它们不起作用. (3认同)

Ale*_*lik 6

=, *=, etc.(几乎)具有最低优先级的运算符(参见此参考).

这意味着无论你在赋值运算符的右侧有什么表达式,都会首先计算这些表达式.然后,评估结果将分配给赋值运算符左侧的变量(在此情况下乘以*=).


fre*_*low 5

a *= b + c不会"扩展"到任何东西,*=不是预处理器宏.