eine nicht-lokale Klassendefinition ist eine Definition, die nicht in anderer Klasse Körper definiert ist oder es nicht in einem Funktionskörper eingebettet.
Also im Grunde können Sie dies tun:
#include <iostream>
struct NonLocal
{
friend std::ostream& operator<<(std::ostream& os, const NonLocal& l)
{
os << l.x;
return os;
}
private:
int x;
};
int main()
{
NonLocal nl;
std::cout << nl;
}
Sie können dies aber nicht tun:
#include <iostream>
int main()
{
struct Local
{
friend std::ostream& operator<<(std::ostream& os, const Local& l) // this will fail to compile
{
os << l.x;
return os;
}
private:
int x;
};
Local l;
std::cout << l;
}
Vom cppreference.com:
Eine Klassendeklaration in Namespace Umfang erscheinen können (In diesem Fall definiert eine gewöhnliche Klasse), innerhalb einer anderen Klassendefinition (in der Fall definiert es eine verschachtelte Klasse), und innerhalb des Rumpfes einer Funktion, in , welche Fall definiert es eine lokale Klasse. Der Name einer solchen Klasse nur existiert innerhalb des Funktionsumfangs und ist außerhalb nicht zugänglich.
- Eine lokale Klasse statische Mitglieder nicht
- Mitglied Funktionen einer lokalen Klasse haben keine Verbindung
- Mitglied Funktionen einer lokalen Klasse ganz
- Lokale Klassen andere in der Klasse Körper werden müssen definiert sein kann als Closure-Typen (seit C++ 14) können keine Member-Vorlagen haben
- Lokale Klassen dürfen keine Freundschablonen haben
- Eine lokale Klasse innerhalb einer Funktion (einschließlich Elementfunktion) kann auf dieselben Namen wie th zugreifen Die umschließende Funktion kann zugreifen.
- lokale Klassen nicht als Template-Argumente (bis C++ 11)
[Hervorhebung von mir]
Ihre Frage ist unklar und missgebildet. Links sind kein Ersatz für Inhalte. – Amit
Ich denke, ist sehr präzise und in sich abgeschlossen, ist die Verbindung nicht wirklich notwendig, um die Frage zu verstehen. Tatsächlich habe ich die Antwort erhalten, die ich in weniger als 1 Minute suchte. –
Die Antworten, die Sie bekommen haben, erklären alle, was eine lokale Klasse ist - das ist nicht, was Ihre Frage fragt. Es ist schön, dass du die Antwort bekommen hast, die du brauchst, aber die Frage ist immer noch falsch. – Amit