Heim >Backend-Entwicklung >C++ >Kann „automatisch' private Typen in C ableiten?

Kann „automatisch' private Typen in C ableiten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-19 20:51:12111Durchsuche

Can `auto` Deduce Private Types in C  ?

Verwendung von „auto“ für private Typen

In C mag es kontraintuitiv erscheinen, dass man „auto“ mit privaten Typen verwenden kann, z im folgenden Code demonstriert:

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

Normalerweise würde man erwarten, dass versucht wird, direkt auf den privaten Typ „Bar“ zuzugreifen (z. B. Foo::Bar b = f.Baz();) würde zu einem Fehler führen. Dies ist jedoch bei Verwendung von „auto“ nicht der Fall:

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

Dieses Verhalten entsteht aufgrund der Ähnlichkeit zwischen „auto“-Regeln und der Vorlagentyp-Ableitung. Ähnlich wie private Typen an Vorlagenfunktionen übergeben werden können:

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

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

Diese Fähigkeit ergibt sich aus der Tatsache, dass der Name eines privaten Typs zwar möglicherweise nicht zugänglich ist, der Typ selbst jedoch verwendbar bleibt. Folglich ist „auto“ in der Lage, den Typ korrekt abzuleiten und ihn der Variablen „b“ zuzuweisen, obwohl es sich um einen privaten Typ handelt.

Das obige ist der detaillierte Inhalt vonKann „automatisch' private Typen in C ableiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn