C 11 以前のデフォルト引数を持つクラス テンプレートに空の山括弧を使用する必要があるのはなぜですか?

Barbara Streisand
リリース: 2024-11-04 14:46:05
オリジナル
564 人が閲覧しました

Why Is It Necessary to Use Empty Angle Brackets for Class Templates with Default Arguments in C  11 and Earlier?

テンプレート引数とデフォルト テンプレートについて理解する

C では、テンプレート引数はクラス テンプレートと関数テンプレートを操作する上で不可欠な要素です。デフォルトのテンプレート引数を使用してクラス テンプレートを宣言する場合、オブジェクトの作成時に引数の指定を省略できますが、この動作には特定の制限が適用されます。

説明のために、次のコードを調べてみましょう:

<code class="cpp">template <typename T = int>
class Foo {
};</code>
ログイン後にコピー

このコードは、デフォルトのテンプレート引数 T = int を持つクラス テンプレート Foo を定義します。テンプレート引数

<code class="cpp">Foo me;</code>
ログイン後にコピー

を明示的に指定しなくても Foo のオブジェクトを作成できますが、この構文は C 17 でのみ導入されたことに注意することが重要です。それ以前は、次のコードが必要でした。

<code class="cpp">Foo<> me;</code>
ログイン後にコピー

山括弧 (<>) は、テンプレート引数が存在するが空であることを示します。この構文が必要なのは、コンパイラーがデフォルト値を使用している場合でも、T の型を認識する必要があるためです。 Foo me; のように、テンプレート引数を指定しないと、コンパイル エラーが発生します。

この区別は、単一のデフォルト引数を持つ関数に似ています。括弧のない foo は関数を呼び出しませんが、foo() は関数を呼び出すのと同様に、デフォルト値でインスタンス化をトリガーするには、テンプレート引数の構文が存在する必要があります。

以上がC 11 以前のデフォルト引数を持つクラス テンプレートに空の山括弧を使用する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!