ホームページ >バックエンド開発 >C++ >C クラス テンプレートのメンバー関数はどのような場合に ODR で使用されますか?

C クラス テンプレートのメンバー関数はどのような場合に ODR で使用されますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-07 13:24:13933ブラウズ

When are C   Class Template Member Functions ODR-Used?

C での ODR 使用を理解する

クラス テンプレートのコンテキストで、「odr-use」という用語が登場します。この概念は、クラス テンプレート内のメンバー関数のインスタンス化を理解する上で重要な役割を果たします。

C 標準 [basic.def.odr] によれば、変数または関数は、クラス テンプレート内で使用される場合、odr 使用されます。単なる宣言ではなく実際の定義を必要とするコンテキスト。これには、変数または関数が直接参照される場合、または式内で評価される可能性がある場合が含まれます。ただし、定数式に参加でき、左辺値から右辺値への変換がすぐに適用されるオブジェクトには例外が存在します。

クラス テンプレートのメンバー関数の場合、定義はより具体的になります。つまり、オーバーロードされていない関数です。潜在的に評価される式で参照されるか、オーバーロード候補セットの一部である (メンバーまたはその他) は、純粋仮想関数であり、その名前が明示的に指定されていない限り、odr で使用されます。

この定義により、ODR 使用ルールが複数のコンパイル単位にどのように適用されるかについて疑問が生じる可能性があります。明確にするために、クラス テンプレートは、少なくとも 1 つのコンパイル単位内で ODR で使用する必要がある場合にのみインスタンス化されます。クラス テンプレートを単にインスタンス化しても、明示的に ODR 使用されない限り、そのすべてのメンバー関数が自動的にインスタンス化されるわけではありません。

要約すると、ODR 使用は、実際の定義が必要なエンティティを決定するために C 標準で定義された概念です。これはテンプレートのインスタンス化において重要な役割を果たし、メンバー関数はコンパイル単位内で odr 使用される場合にのみインスタンス化されます。

以上がC クラス テンプレートのメンバー関数はどのような場合に ODR で使用されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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