[英]The order of multiplications
C ++在链式乘法中的作用是什么?
int a, b, c, d;
// set values
int m = a*b*c*d;
是的,订单是从左到右。
int m = a * b * c * d;
如果您对评估顺序或运算符优先级主题更感兴趣,那么您可能会对某些++操作的行为感到惊讶,甚至与C版本不同。
在这种情况下,顺序是从左到右
int m=a*b*c*d;
这里,首先计算(a * b),然后将结果乘以c,然后使用括号表示d:
int m=(((a*b)*c)*d);
它没有任何特殊的“顺序”,如图所示,从左到右。
int m = a * b * c * d;
当使用加法/减法进行除法/乘法时,操作顺序生效。 否则它总是从左到右。 无论如何,通过这个例子,无论他们处于何种顺序,解决方案都是相同的。
该命令名义上是从左到右。 但是我使用的C ++编译器中的优化器可以随意更改他们认为理解的数据类型的顺序。 如果重载operator *并且优化器无法看到您的重载,那么它就无法更改顺序。 但是当你将类型为double的一系列事物(变量,常量,函数结果等)相乘时,优化器可能会使用实数乘法的关联和可交换属性,就好像它在float或double乘法中是真的一样。 当最不重要的位对您很重要时,这可能会导致一些意外。
据我所知,该标准允许优化,但我远不是一个“语言律师”所以我对标准的最佳猜测不是一个值得信赖的声明(与我对编译器实际做的经验相比)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.