ホームページ >バックエンド開発 >C++ >Auto 型と Private 型: 変数宣言に矛盾があるのはなぜですか?

Auto 型と Private 型: 変数宣言に矛盾があるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-17 10:01:25107ブラウズ

Auto vs. Private Types: Why the Discrepancy in Variable Declaration?

Auto 型と Private 型: なぜ矛盾するのでしょうか?

提供されたコードでは、auto を使用して戻り値を受け取る変数 b を宣言しています。 f.Baz() の関数は成功しますが、明示的な型 Foo::Bar を使用するとエラーが発生します。この矛盾は多くの開発者を困惑させています。

自動推論のルールは通常、テンプレート タイプの推論のルールに従います。これは、プライベート型のオブジェクトをテンプレート関数に渡すことができるのと同じように、auto を使用してこれらの型の変数を宣言できることを意味します。

この理由は、プライベート型の名前が型にアクセスできませんが、型自体は使用可能なままです。これは、プライベート型のオブジェクトをクライアント コードに返す機能から明らかです。コンパイラーは、型の名前が公開されていない場合でも、戻り値の型を推測できます。

auto の場合、コンパイラーは、その後に続く式に基づいて型の推測を実行します。 f.Baz() は Foo::Bar 型のオブジェクトを返すため、コンパイラは auto に Foo::Bar 型を割り当てます。ただし、Foo::Bar という名前はプライベートであるため、コンパイラーはその型の変数を直接作成できません。代わりに、Foo::Bar と同じメンバーとプロパティを持つ匿名型を使用します。これにより、明示的な型名にアクセスできない場合でも、b は i メンバーにアクセスできるようになります。

以上がAuto 型と Private 型: 変数宣言に矛盾があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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