質問:
クラス テンプレートを次のように定義できるにもかかわらず以下に示すデフォルトのテンプレート引数:
<code class="cpp">template <typename T = int> class Foo { };</code>
次の例でクラスをインスタンス化するときにテンプレート引数を指定する必要があるのはなぜですか?
<code class="cpp">Foo<int> me;</code>
回答:
質問の内容とは異なり、デフォルトのテンプレート引数を使用してクラス テンプレートを定義する場合、テンプレート引数を明示的に指定する必要はありません。 C 17 では、次のコードが有効です:
<code class="cpp">Foo me;</code>
C 17 より前では、次の構文が必要でした:
<code class="cpp">Foo<> me;</code>
これは、テンプレート引数が次のとおりである必要があることを意味します。たとえ空であっても存在します。この動作は、単一のデフォルト引数を使用して関数を呼び出すことに似ています。foo() と引数なしの foo は両方とも有効な式ですが、前者のみが関数を呼び出します。
デフォルトのテンプレート引数を導入することで、C 11テンプレート パラメーターのデフォルト値を設定する方法を提供することで、クラス テンプレートの操作が容易になりました。さらに、C 11 と C 17 の間の動作の変更で示されているように、この構文は使いやすさを向上させるために時間の経過とともに進化してきました。
以上がC でデフォルトのテンプレート引数を使用する場合でもテンプレート引数を指定する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。