59 Stimmen

Kann ich in einer ungültigen Funktion zurückkehren?

Ich muss zur vorherigen Ebene der Rekursion zurückkehren. Ist die Syntax wie unten richtig?

void f()
{
   // some code here
   //
   return;
}

29 Stimmen

H

113voto

Peter Alexander Punkte 51742

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 .

15voto

Sicher. Sie sollten nur keinen tatsächlichen Wert zurückgeben.

10voto

icktoofay Punkte 121675

Ja, Sie können diesen Code verwenden, um aus der Funktion zurückzukehren. (Ich muss mich hier sehr ausführlich ausdrücken, damit Stack Overflow nicht sagt, dass meine Antwort zu kurz ist)

4voto

Casey Punkte 11402

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.

3voto

Buhake Sindi Punkte 85274

Die einfache Antwort darauf ist JA! C++ erkennt eine ungültige Methode als eine Funktion ohne Rückgabe. Es sagt dem Compiler im Grunde, dass, was auch immer passiert, sobald Sie die return; Pause und verlassen die Methode....

CodeJaeger.com

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.

Powered by:

X