操作数评价顺序的矛盾。

问题描述 投票:0回答:1

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

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

但书上也说了。

"+"从左到右的关联性。

操作数的评价顺序。

order of evaluation of operands

谁能解释一下为什么会这样?

c recursion operator-precedence operands c-standard-library
1个回答
6
投票

评价顺序和关联性是两回事,举个例子。

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

在这个表达式中,你不能知道如果 func1() 将首先或最后被评估,这意味着,你不知道哪个函数将被调用,并首先返回它的值,然而你知道关联性,就像与 +,将从左到右,先 func1() - func2() 那么减法的结果 - func3().

在C语言中没有从左到右或从右到左的评价概念,这与运算符的从左到右和从右到左的关联性不能混为一谈:表达式为 f1() + f2() + f3() 被解析为 (f1() + f2()) + f3() 由于从左到右的关联性 operator+但对 f3() 可以先评估,也可以最后评估,还可以介于两者之间。f1()f2() 在运行时。

https:/en.cppreference.comwclanguageeval_order。

© www.soinside.com 2019 - 2024. All rights reserved.