评估这个的顺序是什么?为什么? C++
What is the order to evaluate this and why? C++
int foo(int a, int& b, int c) {
int temp = a;
a = b;
b = c;
c = temp;
return a - b;
}
int main() {
**foo(foo(a, b, c), b, foo(a, b, foo(a, b, c)));**
return 0;
}
首先评估哪个 foo 函数调用,为什么?
我发布的代码已简化,因此无需跟踪它。
谢谢
假设 **
是拼写错误而不是语法错误,并使用以下命名:
(A) (B) (C) (D)
foo ( foo(a, b, c), b, foo(a, b, foo(a, b, c)))
以下为真:
- (D) 在 (C) 之前计算,因为调用 (C) 需要参数值。
- (A) 在 (B) 和 (C) 之后求值(因此 (D) )
更多不能说,因为 C++ 标准让编译器对参数评估进行排序:
5.2.2/4: When a function is called, each parameter shall be initialized with its corresponding argument. [Note: Such
initializations are indeterminately sequenced with respect to each
other — end note ]
int foo(int a, int& b, int c) {
int temp = a;
a = b;
b = c;
c = temp;
return a - b;
}
int main() {
**foo(foo(a, b, c), b, foo(a, b, foo(a, b, c)));**
return 0;
}
首先评估哪个 foo 函数调用,为什么? 我发布的代码已简化,因此无需跟踪它。 谢谢
假设 **
是拼写错误而不是语法错误,并使用以下命名:
(A) (B) (C) (D)
foo ( foo(a, b, c), b, foo(a, b, foo(a, b, c)))
以下为真:
- (D) 在 (C) 之前计算,因为调用 (C) 需要参数值。
- (A) 在 (B) 和 (C) 之后求值(因此 (D) )
更多不能说,因为 C++ 标准让编译器对参数评估进行排序:
5.2.2/4: When a function is called, each parameter shall be initialized with its corresponding argument. [Note: Such initializations are indeterminately sequenced with respect to each other — end note ]