inline
メンバー関数の定義をヘッダーに入れて関数をとしてマークすると、関数のコードは、関数が.cppファイルから呼び出される任意の場所にインライン化されることをすでに知っています。コンパイルされたバイナリ、関数のコードがどこにあるかを知っています-それに依存する.cppファイルのコンパイルされたコード内。しかし、ヘッダー内の関数をでマークしないとどうなりますかinline
関数の本体は、コンパイラがインライン化しないことを選択できるほど大きいのでしょうか。静的/動的ライブラリのコンテキストでは、関数のクラスはどこにコンパイルされますか?関数のコードはどこにコンパイルされますか?または、まったくコンパイルされておらず、関数のコードの最終的な宛先は、ライブラリのクライアントのコンパイル済み.cppです。後者の場合、inline
(コードが「重すぎる」ために)マークを付けなくても、関数のコードはインライン化されますか?そして最後に、この場合のMSVCコンパイラの動作はGCCの動作とは異なりますか?
確かに、インライン化したいメンバー関数を.hファイル(または.inlファイル)に入れ、「重い」関数を.cppファイルに入れると、物事が明確になりますが、クラスを壊さないようにしたいと思います。したがって、ファイル間での実装が重要です。