Verwendung von „auto“ für private Typen
In C mag es kontraintuitiv erscheinen, dass man „auto“ mit privaten Typen verwenden kann, z im folgenden Code demonstriert:
class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } };
Normalerweise würde man erwarten, dass versucht wird, direkt auf den privaten Typ „Bar“ zuzugreifen (z. B. Foo::Bar b = f.Baz();) würde zu einem Fehler führen. Dies ist jedoch bei Verwendung von „auto“ nicht der Fall:
int main() { Foo f; auto b = f.Baz(); // ok std::cout << b.i; }
Dieses Verhalten entsteht aufgrund der Ähnlichkeit zwischen „auto“-Regeln und der Vorlagentyp-Ableitung. Ähnlich wie private Typen an Vorlagenfunktionen übergeben werden können:
template <typename T> void fun(T t) {} int main() { Foo f; fun(f.Baz()); // ok }
Diese Fähigkeit ergibt sich aus der Tatsache, dass der Name eines privaten Typs zwar möglicherweise nicht zugänglich ist, der Typ selbst jedoch verwendbar bleibt. Folglich ist „auto“ in der Lage, den Typ korrekt abzuleiten und ihn der Variablen „b“ zuzuweisen, obwohl es sich um einen privaten Typ handelt.
Das obige ist der detaillierte Inhalt vonKann „automatisch' private Typen in C ableiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!