ホームページ >バックエンド開発 >C++ >「auto」は C のプライベート型を推定できますか?

「auto」は C のプライベート型を推定できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-19 20:51:12115ブラウズ

Can `auto` Deduce Private Types in C  ?

プライベート型で '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 サイトの他の関連記事を参照してください。

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