Heim >Backend-Entwicklung >C++ >Automatische vs. private Typen: Warum die Diskrepanz bei der Variablendeklaration?
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!