相关疑难解决方法(0)

C++函数参数中的评估顺序

如果我们有这样的三个函数(foo,bar和baz)......

foo(bar(), baz())
Run Code Online (Sandbox Code Playgroud)

C++标准是否保证在baz之前评估条形码?

c++ standards

83
推荐指数
4
解决办法
2万
查看次数

谁定义了C运算符优先级和关联性?

介绍

在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标准.我再一次惊讶地发现在运算符优先级和关联性方面提到的很少.

问题

  1. 如果我认为函数总是从左到右进行评估是错误的,那么表中涉及函数优先级和关联性的真正含义是什么?
  2. 谁定义了运算符优先级和关联性,如果它不是ANSI?如果是ANSI的定义,为什么很少提到运算符优先级和关联性?运算符优先级和关联性是从ANSI C标准推断还是在数学中定义?

c c++ operator-precedence associativity ansi-c

26
推荐指数
3
解决办法
8249
查看次数

多次返回的递归混淆

我仍然围绕递归包裹着我的思绪,我认为我得到像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)步骤(这是否有意义)?如果是这样,这似乎很难想象.

java recursion

8
推荐指数
1
解决办法
916
查看次数

将调用哪些订单功能

在下面的表达式中是否有一些确定的函数调用顺序,或者它是否因编译器而异?

此处的规则是否适用 - 在C中,未指定大多数运算符的函数和操作数的参数的计数顺序.在此Wiki页面中找到了上述规则

a = (f1(10, 20) * f2(30, 40)) + f3()
Run Code Online (Sandbox Code Playgroud)

c function-calls

3
推荐指数
1
解决办法
163
查看次数