5

以下の 2 つの関数を使用して、MSVC08 での Tail 再帰最適化をテストしました。

int TailRecursively1(int i)
{
  return TailRecursively1(i);
}

int TailRecursively2(std::string str)
{
  return TailRecursively2(str);
}

TailRecursive1 は最適化されているのに、TailRecursive2 がスタック オーバーフローを引き起こしたのはなぜですか?

4

1 に答える 1

5

str パラメータを値で TailReucrsively2 に送信するときに、std::string コピー コンストラクタとデストラクタの呼び出しがあるためですか?

(これについては 100% 確信が持てません)

于 2013-01-12T16:20:42.740 に答える