5

当我从 deitel c 学习 C 中的递归函数时,我读到了这句话:

标准 C 没有指定大多数运算符(包括 +)的操作数的计算顺序。

但书中还说:

'+' 从左到右的结合性

操作数的求值顺序:

操作数的求值顺序

谁能解释这是为什么?

4

1 回答 1

7

评估顺序和关联性是两个不同的东西,举个例子:

int x = func1() - func2() - func3(); //having int return types

在这个表达式中,您不知道func1()是先评估还是最后评估,这意味着您不知道将调用哪个函数并首先返回其值,但是您知道与 的关联性+将是左到-对,首先func1() - func2()是减法的结果- func3()

C 中没有从左到右或从右到左求值的概念,不要与运算符的从左到右和从右到左结合性混淆:表达式f1() + f2() + f3()被解析为(f1() + f2()) + f3()由于左的 -to-right 关联性operator+,但对 的函数调用f3()可以首先、最后或在运行时或之间f1()f2()在运行时进行评估。

https://en.cppreference.com/w/c/language/eval_order

于 2020-05-27T19:22:43.953 回答