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 サイトの他の関連記事を参照してください。