Ich muss zur vorherigen Ebene der Rekursion zurückkehren. Ist die Syntax wie unten richtig?
void f()
{
// some code here
//
return;
}
Ich muss zur vorherigen Ebene der Rekursion zurückkehren. Ist die Syntax wie unten richtig?
void f()
{
// some code here
//
return;
}
Ja, Sie können aus einer ungültigen Funktion zurückkehren.
Interessanterweise kann man aus einer void-Funktion auch void zurückgeben. Zum Beispiel:
void foo()
{
return void();
}
Wie zu erwarten, ist dies dasselbe wie eine einfache return;
. Es mag esoterisch erscheinen, aber der Grund ist die Konsistenz der Vorlagen:
template<class T>
T default_value()
{
return T();
}
Hier, default_value
gibt ein standardmäßig konstruiertes Objekt des Typs T zurück, und wegen der Möglichkeit, ein void
funktioniert es auch, wenn T
= void
.
Ja, das führt von der Funktion zur vorherigen Rekursionsebene zurück. Dies wird eine sehr grundlegende Erklärung sein, aber wenn Sie eine Funktion aufrufen, erstellen Sie einen neuen Aufrufstapel. In einer rekursiven Funktion fügen Sie diesem Aufrufstapel einfach etwas hinzu. Wenn Sie von einer Funktion zurückkehren, egal ob Sie einen Wert zurückgeben oder nicht, verschieben Sie den Stapelzeiger zurück zur vorherigen Funktion auf dem Stapel. Das ist wie bei einem Stapel von Tellern. Man legt immer neue Teller darauf, aber wenn man zurückkehrt, wird der oberste Teller verschoben.
Sie können dies auch mit Hilfe eines Debuggers überprüfen. Setzen Sie einfach ein paar Haltepunkte in Ihren Code und gehen Sie ihn durch. Sie können selbst überprüfen, ob es funktioniert.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
29 Stimmen
H