C .cpp ファイルのインライン メンバー関数: ジレンマと解決策
C では、インライン メンバー関数は通常、次のヘッダー ファイルで宣言されます。効率の理由。ただし、特定のシナリオでは、.cpp ファイルに関数を実装することが必要になる場合があります。このような状況を詳しく見てみましょう:
循環依存関係のある次のシナリオを考えてみましょう:
A.h
<code class="cpp">#pragma once #include "B.h" class A { B b; };</code>
B.h
<code class="cpp">#pragma once class A; class B { inline A getA(); };</code>
循環依存関係を解消するには、getA の実装を B.cpp:
B.cpp
<code class="cpp">#include "B.h" #include "A.h" inline A B::getA() { return A(); }</code>
ジレンマ
ヘッダーと .cpp ファイルの両方に inline キーワードを配置すると、関数のインライン展開に影響しますか?解決策
残念ながら、.cpp ファイルに inline キーワードがあるにもかかわらず、B.cpp 自体内で使用されない限り、コンパイラは getA をインライン化しません。これは、コンパイラがインライン関数に遭遇するたびにその定義を要求するためです。通常、関数をヘッダー ファイルに配置すると、この可用性が保証されます。ベスト プラクティス
C の FAQ によると、ヘッダー ファイルでインライン関数を定義することが必須です。これらを .cpp ファイルに配置すると、未解決の外部エラーが発生する可能性があります。代替解決策
提供されたシナリオでは、インライン関数を .cpp ファイルに配置する代替解決策は提案されていません。 cpp ファイル。以上がインラインメンバー関数を .cpp ファイルで定義してもインライン化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。