Ich war reading die verknüpfte Frage, die mich dazu bringt, diese Frage zu stellen.Verschachtelte Funktionen sind nicht erlaubt, aber warum geschachtelte Funktionsprototypen erlaubt sind? [C++]
Betrachten Sie den folgenden Code
int main()
{
string SomeString();
}
Alle sagen, Compiler dies als Funktionsprototyp nimmt und nicht als String Objekt. Betrachten Sie nun den folgenden Code.
Compiler sagte, das ist ungültig, da ich denke, geschachtelte Funktionsdefinition ist nicht erlaubt. Wenn es nicht erlaubt ist, warum geschachtelte Funktionsprototypen erlaubt sind? Es gibt keinen Vorteil, anstatt Verwirrung zu stiften (oder fehlen mir hier einige gültige Punkte?).
Ich fand heraus, das folgende ist gültig.
int main()
{
string SomeFun();
SomeFun();
return 0;
}
string SomeFun()
{
std::cout << "WOW this is unexpected" << std::endl;
}
Dies ist auch verwirrend. Ich erwartete die Funktion SomeFun() wird einen Bereich nur in Haupt haben. Aber ich habe mich getäuscht. Warum Compiler ermöglicht, Code wie oben zu kompilieren? Gibt es Situationen in Echtzeit, in denen Code wie oben sinnvoll ist?
Irgendwelche Gedanken?
+1 nur auf die gleiche Abfrage, und die Antworten unten haben alle Informationen und mehr. – slashmais