Ich beobachtete one of Jason Turner's videos und ich sah, dass Sie einen Typ innerhalb eines Funktionsbereichs definieren können und außerhalb dieses Bereichs durch Funktion Rückgabetypabzug verfügbar haben.Warum kann ich auf eine Struktur zugreifen, die innerhalb einer Funktion außerhalb der Funktion durch Rückgabetypableitung definiert ist?
auto f()
{
struct MyStruct
{
int n;
};
return MyStruct{};
}
int main()
{
auto a = f().n;
return a;
}
Warum ist das erlaubt? Gibt es einen Absatz in der C++ 14-Norm, der dies erlaubt?
Beim Versuch, die typeid
von MyStruct
mit Klappern in compile explorer ich in der Montage Ausgabe angezeigt die Art, wie f()::MyStruct
sah zu bekommen, so gibt es einen Spielraum, aber irgendwie kann ich MyStruct
außerhalb dieses Bereichs zuzugreifen. Ist das eine Art von ADL-Sache?
Der Name einen Umfang hat, nicht der Typ. Sie verwenden den Namen nicht außerhalb seines Gültigkeitsbereichs. –
Es gibt ein Duplikat ... irgendwo. Aber hey, dieser sieht gut aus. – Quentin
Etwas wie [das] (http://stackoverflow.com/questions/13532784/why-cani-i-use-auto-on-a-private-type)? – smkanadl