如果我们有这样的三个函数(foo,bar和baz)......
foo(bar(), baz())
Run Code Online (Sandbox Code Playgroud)
C++标准是否保证在baz之前评估条形码?
在C/C++的每本教科书中,您都可以找到运算符优先级和关联表,如下所示:

http://en.cppreference.com/w/cpp/language/operator_precedence
StackOverflow上的一个问题是这样的:
以下函数的执行顺序如下:
f1() * f2() + f3();
f1() + f2() * f3();
参考上面的图表,我自信地回答说函数具有从左到右的关联性,因此在前面的语句中,在这两种情况下都会像这样评估:
f1() - > f2() - > f3()
评估函数后,您完成评估,如下所示:
(a1*a2)+ a3
a1 +(a2*a3)
令我惊讶的是,很多人告诉我,我错了.决心证明他们错了,我决定转向ANSI C11标准.我再一次惊讶地发现在运算符优先级和关联性方面提到的很少.
我仍然围绕递归包裹着我的思绪,我认为我得到像factorial这样的基本知识.但是,如果返回语句比下面的代码片段更复杂,我想进一步澄清:
/**
* @param n >= 0
* @return the nth Fibonacci number
*/
public static int fibonacci(int n) {
if (n == 0 || n == 1) {
return 1; // base cases
} else {
return fibonacci(n-1) + fibonacci(n-2); // recursive step
}
}
Run Code Online (Sandbox Code Playgroud)
在return语句中,斐波纳契(n-1)是否完全重复,然后沿着斐波那契(n-2)步骤(这是否有意义)?如果是这样,这似乎很难想象.
在下面的表达式中是否有一些确定的函数调用顺序,或者它是否因编译器而异?
此处的规则是否适用 - 在C中,未指定大多数运算符的函数和操作数的参数的计数顺序.在此Wiki页面中找到了上述规则
a = (f1(10, 20) * f2(30, 40)) + f3()
Run Code Online (Sandbox Code Playgroud)