ホームページ >バックエンド開発 >C++ >\'Foo me;\' が C 11 のデフォルトのテンプレート引数で機能しないのはなぜですか?

\'Foo me;\' が C 11 のデフォルトのテンプレート引数で機能しないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-04 14:02:02386ブラウズ

Why Does

デフォルトのテンプレート引数を使用したクラス テンプレートの明示的な引数仕様の克服

C 11 では、最初に混乱を引き起こした概念であるデフォルトのテンプレート引数が導入されました。この記事では、このトピックについて詳しく掘り下げ、「Foo me;」などのデフォルトのテンプレート引数を持つクラス テンプレートのインスタンスが main で無効である理由を説明します。

デフォルトのテンプレート引数を持つ次のクラス テンプレートを考えてみましょう。 of int:

template <typename T = int>
class Foo {};

デフォルトのテンプレート引数が存在するにもかかわらず、コード「Foo me;」 main ではコンパイルエラーが発生します。これは、デフォルトのテンプレート引数を明示的に指定するには、「Foo<> me;」のような空の山かっこが必要であるためです。

この要件の背後にある理由は、関数呼び出しで一貫した構文が必要であるためです。 C では、デフォルトの引数を持つ関数では、デフォルト値が使用されている場合でも、引数の構文が存在する必要があります。このルールは、デフォルトのテンプレート引数を持つクラス テンプレートに拡張され、言語構文の一貫性が確保されます。

以上が\'Foo me;\' が C 11 のデフォルトのテンプレート引数で機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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