0
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 関数呼び出しが最初に評価され、その理由は? 投稿したコードは単純化されているため、トレースする必要はありません。ありがとうございました

4

1 に答える 1

2

構文エラーではなくタイプミスであると仮定し**、次の命名を使用します。

 (A)      (B)          (C)       (D) 
foo ( foo(a, b, c), b, foo(a, b, foo(a, b, c)))

以下は真です:

  • (C) を呼び出すにはパラメーター値が必要なため、(D) は (C) の前に評価されます。
  • (A) は (B) の後に評価され、(C) (したがって (D) )

C++ 標準では、パラメーター評価の順序をコンパイラーに許可しているため、これ以上は言えません。

5.2.2/4:関数が呼び出されると、各パラメータは対応する引数で初期化されます。[注: このような初期化は、相互に不定に順序付けられます — 末尾の注記]

于 2016-11-19T19:45:25.127 に答える