C のコンテキストでは、「odr-use」はコンパイル中にエンティティの定義を提供する必要がある状況を指します。 。この用語は、実際の定義を必要としない単なる宣言と区別します。
即時の定義を提供せずにエンティティを宣言できる機能は、インターフェイス (ヘッダー ファイル) を分離できるため、モジュラー プログラミングにとって非常に重要です。実装 (ソース ファイル) から。ただし、コンパイル単位間で一貫した動作を保証するために、C 標準ではエンティティを定義する必要がある場合についての特定のルールを定義しています。
C 標準によれば、エンティティは、次の場合に「odr-used」になります:
クラスのコンテキスト内テンプレート、メンバー関数は、odr で使用される場合にのみインスタンス化されます。これは、クラス テンプレートが 1 つのコンパイル単位でインスタンス化される場合、オーバーロード解決の一部として実際に呼び出されるか使用されるメンバー関数のみがその単位でインスタンス化されることを意味します。他のメンバー関数は、使用されるまでインスタンス化されないままになります。
この動作は、テンプレート メンバーの不必要なインスタンス化を防ぐために不可欠であり、コンパイル時間を大幅に短縮し、プログラム全体の効率を向上させることができます。また、テンプレート設計の柔軟性も可能になり、ユーザーが汎用クラスを作成し、特定のニーズに基づいて必要な機能のみをインスタンス化できるようになります。
以上がC における ODR 使用の構成要素は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。