gpt4 book ai didi

c++ - 运算符计算方向

转载 作者:可可西里 更新时间:2023-11-01 18:26:58 26 4
gpt4 key购买 nike

我遇到了一些我无法理解的东西。

我有这个代码:

cout << "f1 * f1 + f2 * f1 - f1 / f2 is: "<< f1 * f1 + f2 * f1 - f1 / f2 << endl;

所有的“f”都是对象,所有的运算符都是重载的。

奇怪的是第一个计算是 / 运算符,然后是第二个*,然后是第一个*;之后是运算符 +,最后是运算符 -

所以基本上,/* 从右到左工作,+- 运算符从左到右工作。

我做了另一个测试...我检查了这段代码:

 cout << "f1 * f1 / f2 is: " << f1 * f1 / f2 << endl;

现在,第一个运算符是*,然后才是运算符/。所以现在,它是从左到右工作的。

谁能帮我理解为什么方向不同?

10 倍!

最佳答案

这又是函数参数求值顺序的问题——C++ 没有指定这样的顺序。您的代码相当于:

(f1 * f1) + (f2 * f1) - (f1 / f2)

三个乘法和除法运算可以按任何顺序求值。这对于命名函数来说可能更清晰:

add(f1*f2,f2*f1)).minus(f1/f2);

底线是结合性和优先级与函数参数和/或子表达式的计算顺序无关。给出简单的表达式:

a + b

C++(和 C)编译器可以自由地先评估 a,然后评估 b,或者先评估 b 然后 a,无论 '+' 是否重载。

关于c++ - 运算符计算方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2621460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com