Gibt es ein äquivalent zu "for ... else" - Schleife in Python C++?

Python hat eine interessante for - Anweisung können Sie angeben, dass ein else - Klausel.

In einem Konstrukt wie diesem:

for i in foo:
  if bar(i):
    break
else:
  baz()

den else - Klausel ausgeführt wird, nachdem der for, aber nur, wenn die for normal beendet wird (nicht durch eine break).

Fragte ich mich, ob es ein äquivalent in C++? Kann ich for ... else?

  • Es ist eine interessante Idee, die kommt jeden jetzt und dann. Aus Neugier, wie oft ist so eine Konstruktion, die im realen code?
  • Dies ist die eigentliche Frage. Als ich anfing, lernen Python, die ich irgendwie fand, dass dies belanglos und verwirrend für Anfänger am besten; ich konnte Sie nicht finden jede betätigung Voraussetzung für dieses Konstrukt.
  • Ich weiß, es ist eine echte Frage, aber es ist nicht wirklich code -es ist einfach zu und bar. Ich Frage mich, wie oft real-algorithmen eine explizite extra-Zweig, der nur gilt, wenn die Schleife abgeschlossen ist. Ich kann nicht glauben, nützlich Beispiele jetzt.
  • die Umsetzung find() ist ein klassisches Beispiel, wo diese conctruct verwendet wird.
  • wirklich? Normalerweise sind die standard-vorzeitige Rückgabe funktioniert gut für find-algorithmen, ohne die Notwendigkeit für einen separaten Schleife "vollständig" blockieren.
  • In der Regel die frühe Rückkehr ist wirklich eine return, nicht ein break, und dann macht es überspringen Sie den code unmittelbar nach der Schleife.
  • Ich mag diese Konstruktion, und ich machte eine Suche, um zu sehen, Ob ich finden konnte, einige Anwendungsfälle es in meinem code zu beantworten @KerrekSB , aber ich brauche, um es zu veröffentlichen, als eine Antwort, denn Kommentare sind nicht genug
  • Seitdem wurde ich davon überzeugt, dass diese Konstruktion sinnvoll ist. Die Argumentation ist diese: Alle drei if (c), while (c) und for (...; c; ...) bewerten c, aber derzeit nur die erste ermöglicht den Zugriff auf das Ergebnis von diesem Ausdruck. Die anderen beiden sind wegwerfen dieser Informationen, die gegen das Prinzip, dass Sie sollten nicht wegwerfen Ergebnisse, die gewonnen wurden, als Teil einer Berechnung.
  • Allerdings hätte ich gerne viel mehr, wenn die Schlüsselwörter gewesen wäre, als 'sonst'. So etwas wie 'nobreak' oder auch 'felse' und 'welse', die macht der Absicht, sich mehr als der gewöhnliche anderes. Jedes mal, wenn ich es benutze, fühle ich das Bedürfnis, einen Kommentar hinzufügen #für die anderen in dieser Linie, nur für den Fall.
  • not break statement-block hat den Vorteil, mit bestehenden keywords für bessere rückwärts-Kompatibilität (und als starkes Indiz für die Bedingungen, unter denen es läuft). In C++ ist die Verwendung von else denn dies würde im Widerspruch mit den bestehenden code a la if (...) for (...) ...; else ....

InformationsquelleAutor Delgan | 2014-07-11
Schreibe einen Kommentar