フリー関数を呼び出すクラス メンバー関数があるとします。
class MyClass
{
public:
void func1() {func2();}
};
func2
インラインであるため、コンパイラが ( )内の関数をインライン化する可能性があるかどうか知りたいfunc1
です。
事実func2
がインライン化されるかどうかは、func2 の複雑さに依存します。func1 がインライン化されているかどうかは、f2 展開 (存在する場合) 後の複雑さに依存します。
インライン化は本質的にコンパイラの最適化であり、関数定義がソース内でインライン化されている (したがって繰り返し可能である) かどうかに依存しません。
コンパイラと状況に依存します。
コンパイラは、以下に基づいて関数をインライン化することを決定します。
したがって、この場合、func2
がコンパイラに認識され、コンパイラがインライン化しても問題ないと判断できるほど小さい場合は、おそらくそうなるでしょう。
インライン化の動作は完全に実装定義です。コンパイラは、何をすべきかを決定するために、独自のヒューリスティックを無視するか、尊重するか、または使用するかを自由に選択できます。
求められていないのにコンパイラが実行することがあります:コンパイラが C++ コードをインライン化するのはいつですか?
時々、コンパイラはそれを無視します: https://softwareengineering.stackexchange.com/questions/35432/inline-functions-in-c-whats-the-point