Heim > Backend-Entwicklung > C++ > Warum funktioniert „auto' mit privaten Typen, während die explizite Deklaration fehlschlägt?

Warum funktioniert „auto' mit privaten Typen, während die explizite Deklaration fehlschlägt?

Mary-Kate Olsen
Freigeben: 2024-12-16 00:57:09
Original
654 Leute haben es durchsucht

Why Does 'auto' Work with Private Types While Explicit Declaration Fails?

Verwendung von „auto“ für private Typen: Barrierefreiheit enthüllt

Bei der Arbeit mit privaten Typen innerhalb einer Klasse kann es zu einer merkwürdigen Situation kommen: Beim Versuch, a explizit zu deklarieren Variable, die den Typnamen verwendet, führt zu einem Fehler. Die Verwendung von „auto“ zum Ableiten des Typs scheint nahtlos zu funktionieren.

class Foo {
    struct Bar { int i; };
public:
    Bar Baz() { return Bar(); }
};
Nach dem Login kopieren

Im gegebenen Fall Code, Foo enthält einen privaten verschachtelten Typ Bar. Die Ausführung der folgenden Zeile löst einen Fehler aus:

Foo::Bar b = f.Baz();  // error
Nach dem Login kopieren

Unerwartet wird das Problem durch die Verwendung von „auto“ behoben:

auto b = f.Baz();         // ok
Nach dem Login kopieren

Warum ist das zulässig?

Sowohl die „automatische“ Typableitung als auch die Vorlagentyp-Inferenz haben einen ähnlichen zugrunde liegenden Mechanismus. In diesem Fall ähnelt es der Funktionsweise von „Vorlagen“-Funktionen mit privaten Typen:

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

int main() {
    Foo f;
    fun(f.Baz());         // ok
}
Nach dem Login kopieren

Enthüllung der Barrierefreiheit

Die Möglichkeit, Objekte privater Typen an zu übergeben Vorlagenfunktionen verwenden oder „auto“ verwenden, um auf ihren Typ zu schließen, ergibt sich aus der Tatsache, dass der Typ selbst zugänglich bleibt, auch wenn sein Name verborgen ist. Der Compiler entwirrt durch Typableitung die Struktur des Objekts und ermöglicht so seine Nutzung.

Daher ist der Name eines privaten Typs zwar nicht zugänglich, seine Typinformationen sind jedoch weiterhin verfügbar, was eine Manipulation durch Mechanismen wie „auto“ ermöglicht ' oder Vorlagenabzug.

Das obige ist der detaillierte Inhalt vonWarum funktioniert „auto' mit privaten Typen, während die explizite Deklaration fehlschlägt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage