C では、コンパイラーが関数パラメーターからテンプレート パラメーターを推論できるため、簡潔でタイプ セーフなコードが可能になります。ただし、この機能はクラス コンストラクターでは使用できません。なぜそうなるのでしょうか?
コード例では、コンストラクターがクラスの唯一のエントリ ポイントではないため、コンパイラは Variable のテンプレート パラメーターを推論できません。コピー コンストラクターと代入演算子は、オブジェクトを作成および変更する別の方法を提供します。
次のシナリオを考えてみましょう:
MyClass m(string s); MyClass *pm; *pm = m;
この場合、コンパイラーは、どのテンプレート タイプが必要であるかを認識できません。私のクラス午後。コンストラクターに渡された引数から型を推測することは可能ですが、代入が含まれる場合は不確実になり、意図した型を決定することが困難になります。
さらに、型の推測が望ましくない場合もあります。たとえば、クラスには、さまざまな目的でさまざまな型を受け入れるコンストラクターが含まれる場合があります。テンプレートの型を推論すると、クラス インターフェイスに意図しない制約が課される可能性があります。
C 17 ではコンストラクター引数からの型推論が導入される予定であることに注意してください。これにより、次の構文が有効になります:
std::pair p(2, 4.5); std::tuple t(4, 3, 2.5);
ただし、型推論は便利な機能であり、常に適切であるとは限らないことを覚えておくことが重要です。その制限の背後にある理由を理解することは、開発者が堅牢で保守可能な C コードを作成するのに役立ちます。
以上がC テンプレートのパラメーター推論がコンストラクターで機能しないのはなぜですか (C 17 まで)?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。