再帰関数のインライン化
再帰関数はインライン化できないというのはよくある誤解です。ただし、一定の考慮事項があるとはいえ、コンパイラは確かに再帰関数をインライン化できます。
インライン修飾子とコンパイラの最適化
関数のインライン指定子は、単に関数のヒントにすぎません。コンパイラ。インライン修飾子に関係なく、関数をインライン化するかどうかの最終決定権はコンパイラにあります。
コンパイラのインライン化決定
コンパイラは、関数をインライン化するかどうかをベースに決定します。
インライン化の最適化の例
次の再帰階乗関数について考えてみましょう。
<code class="cpp">inline int factorial(int n) { if (n <= 1) return 1; else return n * factorial(n - 1); }</code>
最適化コンパイラは、この関数を次の最適化されたコードに見られるように、特定のレベルです:
<code class="cpp">int factorial(int n) { if (n <= 1) return 1; else { int n2 = n - 1; if (n2 <= 1) return n * 1; else { int n3 = n2 - 1; if (n3 <= 1) return n * n2 * 1; else return n * n2 * n3 * factorial(n3 - 1); } } }</code>
この場合、コンパイラは階乗関数を 3 回展開し、再帰呼び出しの一部を効果的にインライン化しています。
以上が再帰関数はインライン化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。