ホームページ >バックエンド開発 >C++ >関数とは異なり、C テンプレート パラメーターをクラス コンストラクターから推論できないのはなぜですか?

関数とは異なり、C テンプレート パラメーターをクラス コンストラクターから推論できないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-03 15:13:13645ブラウズ

Why Can't C   Template Parameters Be Inferred from Class Constructors, Unlike Functions?

クラス コンストラクターからテンプレート パラメーターを推論できないのはなぜですか?

C では、関数パラメーターからテンプレート パラメーターを推論でき、便利な型推定が可能です。ただし、この推論はクラス コンストラクターには拡張されません。

理由:
クラス コンストラクターの推論が欠如しているのは、コンストラクターがクラス コンストラクターの唯一のエントリ ポイントではないという事実に起因します。クラス。コピー コンストラクターと代入演算子は、テンプレート パラメーターに関する明示的な情報がなくてもオブジェクトを操作できます。

次の例を考えてみましょう:

MyClass m(string s);
MyClass *pm;
*pm = m;

このシナリオでは、コンパイラーがそれを判断するのは困難です。 pm のテンプレート パラメーター。m と pm の両方にこの情報がありません。したがって、クラス コンストラクターの推論を許可すると、不確実性と構文上の困難が生じます。

C 17 の例外:
C 17 では、このルールの例外が導入されました。 std::pair や std::tuple などの特定の型では、テンプレート パラメーターはコンストラクター引数から推論できます。

推論が望ましくない場合:
場合によっては、コンストラクターからのテンプレート パラメーターは望ましくない場合があります。コンストラクターがオーバーライドできないデフォルトのテンプレート パラメーターを使用するクラスを考えてみましょう。推論が許可されている場合、デフォルト値がオーバーライドされ、予期しない動作が発生する可能性があります。

したがって、関数パラメーターのテンプレート パラメーター推論によりコードの簡潔性が向上しますが、クラス コンストラクターに対するそのような推論がないことで明確さが確保され、潜在的な動作が防止されます。クラスの使用法に曖昧さがあります。

以上が関数とは異なり、C テンプレート パラメーターをクラス コンストラクターから推論できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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