Heim >Backend-Entwicklung >C++ >Ist der Abzug vom Mitgliedstyp „Private Class' mit „auto' in C gültig?

Ist der Abzug vom Mitgliedstyp „Private Class' mit „auto' in C gültig?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-16 01:48:141003Durchsuche

Is Private Class Member Type Deduction with `auto` Valid in C  ?

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!

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