C では、関数パラメーターからテンプレート パラメーターを推論でき、便利な型推定が可能です。ただし、この推論はクラス コンストラクターには拡張されません。
理由:
クラス コンストラクターの推論が欠如しているのは、コンストラクターがクラス コンストラクターの唯一のエントリ ポイントではないという事実に起因します。クラス。コピー コンストラクターと代入演算子は、テンプレート パラメーターに関する明示的な情報がなくてもオブジェクトを操作できます。
次の例を考えてみましょう:
MyClass m(string s); MyClass *pm; *pm = m;
このシナリオでは、コンパイラーがそれを判断するのは困難です。 pm のテンプレート パラメーター。m と pm の両方にこの情報がありません。したがって、クラス コンストラクターの推論を許可すると、不確実性と構文上の困難が生じます。
C 17 の例外:
C 17 では、このルールの例外が導入されました。 std::pair や std::tuple などの特定の型では、テンプレート パラメーターはコンストラクター引数から推論できます。
推論が望ましくない場合:
場合によっては、コンストラクターからのテンプレート パラメーターは望ましくない場合があります。コンストラクターがオーバーライドできないデフォルトのテンプレート パラメーターを使用するクラスを考えてみましょう。推論が許可されている場合、デフォルト値がオーバーライドされ、予期しない動作が発生する可能性があります。
したがって、関数パラメーターのテンプレート パラメーター推論によりコードの簡潔性が向上しますが、クラス コンストラクターに対するそのような推論がないことで明確さが確保され、潜在的な動作が防止されます。クラスの使用法に曖昧さがあります。
以上が関数とは異なり、C テンプレート パラメーターをクラス コンストラクターから推論できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。