プライベート型で 'auto' を使用する
C では、次のようにプライベート型で 'auto' を利用できることは直観に反しているように思えるかもしれません。次のコードで示されています:
class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } };
通常、これは予期されます。プライベート型「Bar」に直接アクセスしようとすると (例: Foo::Bar b = f.Baz();)、エラーが発生します。ただし、'auto' を使用する場合は当てはまりません:
int main() { Foo f; auto b = f.Baz(); // ok std::cout << b.i; }
この動作は、'auto' ルールとテンプレート タイプ推定の類似性により発生します。プライベート型をテンプレート関数に渡す方法と同様です:
template <typename T> void fun(T t) {} int main() { Foo f; fun(f.Baz()); // ok }
この機能は、プライベート型の名前にはアクセスできない場合でも、型自体は使用可能なままであるという事実に由来します。その結果、'auto' はプライベート型であるにもかかわらず、型を正しく推測し、それを変数 'b' に割り当てることができます。
以上が「auto」は C のプライベート型を推定できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。