関数が小さい場合 (頻繁に変更する可能性は低い)、および無数の他のヘッダーを含めずに関数をヘッダーに配置できる場合 (関数がそれらに依存しているため)、そうすることが完全に有効です。それらを inline で extern として宣言すると、コンパイラはすべてのコンパイル ユニットに同じアドレスを指定する必要があります。
headera.h :
inline string method() {
return something;
}
メンバー関数は、クラス内で定義されている場合、暗黙的なインラインです。それらについても同じことが当てはまります。問題なくヘッダーに配置できる場合は、実際にそうすることができます。
関数のコードがヘッダーに配置されて表示されるため、コンパイラーはそれらの呼び出しをインライン化できます。つまり、関数のコードを呼び出しサイトに直接配置できます (インラインをその前に配置するため、それほどではありませんが、より多くのただし、コンパイラがその方法を決定するため.インラインのみを配置することは、それに関するコンパイラへのヒントです)。コンパイラは、引数が関数のローカル変数に一致する場所と、引数が互いにエイリアス化されていない場所を認識するようになったため、パフォーマンスが向上する可能性があります。
私の理解では、コンパイルが完了すると、コンパイラはヘッダー ファイルを展開し、それが含まれている場所に配置します。あれは正しいですか?
はい、そうです。関数は、ヘッダーを含めるすべての場所で定義されます。コンパイラは、他のインスタンスを排除することにより、結果のプログラムにそのインスタンスを 1 つだけ配置することに注意を払います。