ホームページ > バックエンド開発 > C++ > C テンプレートのパラメーター推論がコンストラクターで機能しないのはなぜですか (C 17 まで)?

C テンプレートのパラメーター推論がコンストラクターで機能しないのはなぜですか (C 17 まで)?

DDD
リリース: 2024-11-29 17:11:11
オリジナル
671 人が閲覧しました

Why Doesn't C   Template Parameter Inference Work with Constructors (Until C  17)?

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

C では、コンパイラーが関数パラメーターからテンプレート パラメーターを推論できるため、簡潔でタイプ セーフなコードが可能になります。ただし、この機能はクラス コンストラクターでは使用できません。なぜそうなるのでしょうか?

コード例では、コンストラクターがクラスの唯一のエントリ ポイントではないため、コンパイラは Variable のテンプレート パラメーターを推論できません。コピー コンストラクターと代入演算子は、オブジェクトを作成および変更する別の方法を提供します。

次のシナリオを考えてみましょう:

MyClass m(string s);
MyClass *pm;
*pm = m;
ログイン後にコピー

この場合、コンパイラーは、どのテンプレート タイプが必要であるかを認識できません。私のクラス午後。コンストラクターに渡された引数から型を推測することは可能ですが、代入が含まれる場合は不確実になり、意図した型を決定することが困難になります。

さらに、型の推測が望ましくない場合もあります。たとえば、クラスには、さまざまな目的でさまざまな型を受け入れるコンストラクターが含まれる場合があります。テンプレートの型を推論すると、クラス インターフェイスに意図しない制約が課される可能性があります。

C 17 開発

C 17 ではコンストラクター引数からの型推論が導入される予定であることに注意してください。これにより、次の構文が有効になります:

std::pair p(2, 4.5);
std::tuple t(4, 3, 2.5);
ログイン後にコピー

ただし、型推論は便利な機能であり、常に適切であるとは限らないことを覚えておくことが重要です。その制限の背後にある理由を理解することは、開発者が堅牢で保守可能な C コードを作成するのに役立ちます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート