Heim >Backend-Entwicklung >C++ >Automatische vs. private Typen: Warum die Diskrepanz bei der Variablendeklaration?

Automatische vs. private Typen: Warum die Diskrepanz bei der Variablendeklaration?

Barbara Streisand
Barbara StreisandOriginal
2024-12-17 10:01:25107Durchsuche

Auto vs. Private Types: Why the Discrepancy in Variable Declaration?

Auto- und private Typen: Warum der Widerspruch?

Deklarieren Sie im bereitgestellten Code mit auto eine Variable b, die den Rückgabewert empfängt von f.Baz() ist erfolgreich, während die Verwendung des expliziten Typs Foo::Bar zu einem Fehler führt. Diese Inkonsistenz hat viele Entwickler verwirrt.

Die Regeln für den automatischen Abzug folgen im Allgemeinen denen des Vorlagentypabzugs. Das bedeutet, dass Sie, genau wie Sie Objekte privater Typen an Vorlagenfunktionen übergeben können, auch Variablen dieser Typen mit auto deklarieren können.

Der Grund dafür liegt in der Tatsache, dass zwar der Name eines privaten Auf den Typ kann nicht zugegriffen werden, der Typ selbst bleibt verwendbar. Dies zeigt sich in der Möglichkeit, Objekte privater Typen an Clientcode zurückzugeben. Der Compiler kann den Typ des zurückgegebenen Werts ableiten, auch wenn der Name des Typs nicht offengelegt wird.

Im Fall von „auto“ führt der Compiler die Typableitung basierend auf dem folgenden Ausdruck durch. Da f.Baz() ein Objekt vom Typ Foo::Bar zurückgibt, weist der Compiler auto den Typ Foo::Bar zu. Da der Name Foo::Bar jedoch privat ist, kann der Compiler eine Variable dieses Typs nicht direkt erstellen. Stattdessen wird ein anonymer Typ verwendet, der dieselben Mitglieder und Eigenschaften wie Foo::Bar hat. Dadurch kann b auf den i-Member zugreifen, auch wenn auf den expliziten Typnamen nicht zugegriffen werden kann.

Das obige ist der detaillierte Inhalt vonAutomatische vs. private Typen: Warum die Diskrepanz bei der Variablendeklaration?. 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