ホームページ >バックエンド開発 >C++ >直接アクセスが禁止されているのに、「auto」がプライベート C 型にアクセスできるのはなぜですか?

直接アクセスが禁止されているのに、「auto」がプライベート C 型にアクセスできるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-16 06:31:11811ブラウズ

Why Can `auto` Access Private C   Types When Direct Access Is Forbidden?

Auto 型とプライベート型: アクセシビリティの謎を明らかにする

C の領域では、 auto の多用途性はしばしば好奇心を引き起こし、時には当惑さえ引き起こします。 auto をプライベート型で使用するときに、1 つの困惑した観察が生じます。

次のコード スニペットを考えてみましょう。これは驚くべきことにエラーなしでコンパイルされます。

class Foo {
struct Bar { int i; };
public:
    Bar Baz() { return Bar(); }
};

int main() {
    Foo f;
    auto b = f.Baz();         // ok
    std::cout << b.i;
}

この型破りな動作により、次のような疑問が生じます。なぜ、直接アクセスが禁止されているのに、auto を介してプライベート型を使用しているのでしょうか?

この謎を解明するには、メカニズムを詳しく掘り下げる必要があります。自動。その型推論ルールは、C テンプレートのルールをほぼ反映しています。この観察は、前述のコード サンプルにも当てはまります。プライベート型のオブジェクトを引数としてテンプレート関数に渡すことができるのと同じように:

template <typename T>
void fun(T t) {}

int main() {
    Foo f;
    fun(f.Baz());         // ok
}

また、auto を使用してその型を推測することもできます。これは、型名自体にはアクセスできないままでも、型情報は引き続き利用できるためです。これにより、プライベート型をクライアント コードに返すことが許可され、通常は禁止されていた auto.

によるアクセスが許可されます。

以上が直接アクセスが禁止されているのに、「auto」がプライベート C 型にアクセスできるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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