ホームページ >バックエンド開発 >C++ >C における ODR 使用の構成要素は何ですか?

C における ODR 使用の構成要素は何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-08 11:39:12770ブラウズ

What Constitutes an ODR-Use in C  ?

「odr-use」とは何ですか?

C のコンテキストでは、「odr-use」はコンパイル中にエンティティの定義を提供する必要がある状況を指します。 。この用語は、実際の定義を必要としない単なる宣言と区別します。

即時の定義を提供せずにエンティティを宣言できる機能は、インターフェイス (ヘッダー ファイル) を分離できるため、モジュラー プログラミングにとって非常に重要です。実装 (ソース ファイル) から。ただし、コンパイル単位間で一貫した動作を保証するために、C 標準ではエンティティを定義する必要がある場合についての特定のルールを定義しています。

「odr-use」の定義

C 標準によれば、エンティティは、次の場合に「odr-used」になります:

  • その名前は、潜在的に評価される式として表示されます。実際に評価される式で使用される
  • 選択されていない場合でも、オーバーロード解決中に候補関数のセットのメンバーです
  • 次の場合でも、非純粋仮想関数です明示的に呼び出されない

ODR 使用およびクラス テンプレート メンバー関数

クラスのコンテキスト内テンプレート、メンバー関数は、odr で使用される場合にのみインスタンス化されます。これは、クラス テンプレートが 1 つのコンパイル単位でインスタンス化される場合、オーバーロード解決の一部として実際に呼び出されるか使用されるメンバー関数のみがその単位でインスタンス化されることを意味します。他のメンバー関数は、使用されるまでインスタンス化されないままになります。

この動作は、テンプレート メンバーの不必要なインスタンス化を防ぐために不可欠であり、コンパイル時間を大幅に短縮し、プログラム全体の効率を向上させることができます。また、テンプレート設計の柔軟性も可能になり、ユーザーが汎用クラスを作成し、特定のニーズに基づいて必要な機能のみをインスタンス化できるようになります。

以上がC における ODR 使用の構成要素は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。