私は次のコードがあります評価順*
int p = 5;
std::cout << f(p, p) << std::endl;
x
が渡されているので出力は、9^4
次のとおりです。私はこのような上記の関数を呼び出すと仮定し、今
int f(int &x, int c){
c = c - 1;
if (c == 0) return 1;
x = x + 1;
return f(x, c)*x;
}
をしたがって、x
の最終値は9でなければならないが、上記の機能のreturn
ステートメントが次のように変更された場合:
return x*f(x, c);
出力が3024 (6*7*8*9)
です。なぜ出力に違いがありますか? Operator*
の評価の順序とは関係がありますか?上記のコードの出力を予測するように頼まれた場合、コンパイラ依存か不定で固定されていますか?
"上記のコードの出力を予測するように求められたら、それは固定されているのか、コンパイラに依存していますか? - それは固定され、またコンパイラに依存でもないですが、それは未指定ですが、[ここ](http://en.cppreference.com/w/cpp/language/eval_order)を参照してください。あなたはそれに頼るべきではありません。コンパイラは、計算を優先して並べ替えることができます。 – yeputons
あなたは基本的にやっていることは、逆の順序 – macroland
で階乗関数である@macroland私はそうは思わない、それは違います。 – Jarvis