Auto bei privaten Typen
Die Verwendung von „auto“ zum Deklarieren einer Variablen kann beim Umgang mit privaten Klassenmitgliedern verwirrend sein. In diesem Beispiel wird der Code erfolgreich kompiliert:
class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } }; int main() { Foo f; auto b = f.Baz(); std::cout << b.i; }
Ist dieser Code gültig? Wenn ja, warum?
Der Code ist tatsächlich gültig. auto folgt den gleichen Regeln wie der Vorlagentypabzug. Der Grund dafür ist, dass beide auto b = f.Baz(); und Spaß(f.Baz()); Kompilieren liegt daran, dass der Typ von Foo::Bar verwendbar ist, auch wenn sein Name privat ist.
Warum ist der Typ verwendbar, wenn sein Name privat ist?
Der Die Unzugänglichkeit privater Typen erstreckt sich nur auf deren Namen. Die Typen selbst können weiterhin verwendet werden, sodass sie an Client-Code zurückgegeben und an Vorlagenfunktionen übergeben werden können.
Das obige ist der detaillierte Inhalt vonIst der Abzug vom Mitgliedstyp „Private Class' mit „auto' in C gültig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!