2

これは、c++ のインライン関数に関する小さな質問です。

C++ でのコンパイルのどの段階で、呼び出し時にインライン関数が実際にインライン化されますか?

それは基本的にどのように機能しますか。

プログラマーが関数の前に inline キーワードを指定して要求した後、コンパイラーが特定の関数をインライン化する必要があると判断した場合、コンパイラーがプログラマーに対してそれを行うのはいつですか.iはコンパイルのどの段階を意味します.

cマクロが展開されるような前処理段階ですか?

4

1 に答える 1

4

コンパイラによって異なります。また、一部のコンパイラの一部のステージには、他のコンパイラに対応するステージがありません。したがって、あなたの質問には明確な答えがありません。

しかし、通常は、関数の解析ツリーが作成された後、コードが実際に生成されるか、多くの最適化が行われる前に行われます。オプティマイザーが処理できる最大量の情報が必要なため、これは最適な場所です。

プリプロセッサのマクロ展開のように行うのは、一般的に時期尚早です。その場合、コンパイラは適切な型チェックを行うのに十分な情報を持っていません。また、副作用が複数回発生するなどのミスを犯しやすくなります。

また、GMan は、関数のインライン化プロセスについて、私がここで説明するよりもはるかに詳細なコメントで、Wikipedia の優れたリンクを提供してくれました。私の答えはおおむね正しいですが、私が思っていたよりも多くのバリエーションがあります。

于 2010-06-23T19:00:10.517 に答える