Wenn Sie die Zeilenanzahl vergleichen möchten, versuchen Sie es zumindest einigermaßen genau. Die for
Schleife soll wie folgt formatiert werden:
Item * last = list;
for (; last->next; last = last->next)
;
Dies macht es viel mehr offensichtlich, dass die for
Schleife (absichtlich) ist eine leere Anweisung zu steuern.Die while
Schleife kann wie folgt geschrieben mehr werden:
Item * last = list;
while (last->next)
last = last->next;
Wenn wir darauf bestehen, dass wir Klammern um auch nur eine einzige kontrollierte Erklärung benötigen, sie am Ende noch mit der gleichen Zeilenzahl für jeweils bis:
Item * last = list;
for (; last->next; last = last->next) {
;
}
vs:
Item * last = list;
while (last->next) {
last = last->next;
}
der Unterschied in der Zeilenzahl also aufgrund war ausschließlich auf die Formatierung, die Sie zu verwenden, entschied sich (und insbesondere die Tatsache, dass Sie nicht die gleiche oder sogar benutzt haben ähnliche Formatierung für die beiden).
Andere haben bereits darauf hingewiesen, dass diese wahrscheinlich zu identischen Code kompilieren, und ich stimme zu, dass Sie dies mit einem vernünftigen Compiler erwarten können (und sollten).
Das lässt Stil und Lesbarkeit als die einzige Differenzierung. In dieser Hinsicht ist die for
Schleife klar vorzuziehen. Einige Leute, die sich anscheinend nie von einer frühen Exposition gegenüber BASIC (oder möglicherweise FORTRAN) erholt haben, bestehen darauf, dass for
-Schleifen nur für einfache gezählte Schleifen verwendet werden sollten, wie sie in BASIC und FORTRAN unterstützt werden. Diese Beschränkung auf C oder C++ anzuwenden, ist einfach falsch und albern. C's for
Loop wurde aus einem guten Grund viel vielseitiger gemacht, und rein künstliche Grenzen zu setzen, tut niemandem etwas.
einfache Daumenregel: Wenn Sie tatsächlich mindestens zwei der drei Klauseln in den Header for
Schleife des verwenden, ist es besser, eine for
Schleife als eine while
Schleife zu verwenden. Eine Schleife mit einem leeren Körper ähnelt in etwa einem Konstruktor mit einem leeren Körper: Es mag für Leute, die die Sprache nicht kennen, ungewohnt und verwirrend sein, aber für jeden, der die Sprache wirklich kennt, ist sie trivial und so vertraut wie die Finger auf ihrer Hand.
Die for-Schleife legt normalerweise nahe, dass die Schleifenvariable ein privates, lokales Detail der Schleife ist. Wenn der Punkt der Schleife irgendeine * andere * externe Variable ändern soll, dann ist die 'while' Version in dieser Hinsicht ein wenig klarer. Insbesondere, wenn der Inkrementteil der for-Schleife den externen Zustand ändert, ist dies möglicherweise schwer zu erkennen und zu verwirren. –
Ich glaube, dass beide in Erinnerung und Zeit gleich sind. –
Es ist so ziemlich eine persönliche Vorliebe .. – Shury