Objective C, Unterschied zwischen n++ und ++n
In Objective-C gibt es da einen Unterschied zwischen den n++ und ++n (zB. verwendet in einer for-Schleife)?
InformationsquelleAutor Lotus | 2011-06-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
++n;
inkrementiert den Wert vonn
vor der Ausdruck ausgewertet wird.n++;
inkrementiert den Wert vonn
nach der Ausdruck ausgewertet wird.So vergleichen Sie die Ergebnisse dieser
mit den Ergebnissen dieser:
Im Fall von Schleifen:
aber es macht keinen Unterschied, es sei denn, Sie hatte so etwas wie dieses:
oder so:
Könnte man sagen:
Gelten die gleichen Regeln, um
--n;
undn--;
offensichtlich.Als ich gerade ein Kapitel über Schleifen, die in diesem Kontext könnte es Sinn machen.
In Objective-C (oder mehr richtig C) ist es ein Unterschied, einfach in allen C-ähnlichen Sprachen. Was Steven Kochan wohl gemeint war, dass in 90% der Zeit macht es keinen Unterschied. Aber die 10%, die töten können Sie, wenn falsch gemacht, dass es sich lohnt, es zu tun konsistent in allen anderen 90% der Zeit, so dass Sie genau sehen, wo Sie eine Ausnahme, und wo es geschieht, egal, für einmal. (Btw, erweiterte ich meine Antwort, da Sie kommentiert es. Sollten die Dinge viel klarer jetzt.)
Lemme-fix, der für ya, n++; Legit Frage imho, wenn man in Rechnung stellt Ihre umstrittene Zitat aus Steven Kochan. (Vielleicht möchten Sie hinzufügen, um Ihre Frage zu klären, Ihre Frage ist hintergrund und vermeiden Sie weitere downvotes? weiß nicht...) Kochan (imho falsche) Aussage ein gutes Beispiel für die Fragen, wobei einer der besser bekannt ist ObjC Anfänger Bücher, nachdem alle.
die Tatsache ist, dass nach deiner Erklärung dachte ich, considerating Kontext (ein Kapitel über Schleifen)- , Kochan purposedly vermieden weitere Erklärungen, vielleicht um Verwirrung zu vermeiden. Didaktisch gesprochen, das Buch ist wirklich gut geschrieben...
InformationsquelleAutor Regexident
++n inkrementiert den Wert, bevor es verwendet wird (pre-increment) und n++ - Schritten nach (post-Inkrement).
Im Kontext einer for-Schleife, gibt es keinen beobachtbaren Unterschied, wie das Inkrement angewendet wird, nachdem der code in der Schleife ausgeführt wurde.
InformationsquelleAutor SuSanda
++n
undn++
unterscheiden sich in dem, was der Ausdruck ausgewertet wird. Ein Beispiel:InformationsquelleAutor jtbandes
In einer Schleife, es wird nicht einen Unterschied machen. Einige Leute sagen
++n
ist schneller wennInformationsquelleAutor Lourens
In Scott Meyers "More effective C++" - Buch macht er einen sehr rationalen Fall für den Vorzug Präfix-Inkrement auf postfix-Inkrement. Kurz gesagt, in dieser Sprache durch operator-überladung Einrichtungen Präfix-Inkrement ist fast immer schneller. Objective C unterstützt keine überladenen Operatoren aber, wenn Sie haben oder jemals tun wird, C++ oder Objective-C++ - Programmierung dann lieber Präfix-Inkrement ist eine gute Angewohnheit, in zu erhalten.
Denken Sie daran, dass die meisten der Zeit, ++n sieht so aus:
In der Erwägung, dass n++ aussieht (bei bestimmungsgemäßem Gebrauch):
Wie Sie sehen können die postfix Fall hat mehr Anweisungen. In einfachen for-Schleifen sind die meisten Compiler sind schlau genug, um zu vermeiden, die Kopie, wenn es offensichtlich ist, dass die Prä-Inkrement-n nicht verwendet werden, aber, Fall geht auf das Präfix Fall.
Ich Hoffe, das macht Sinn. In der Zusammenfassung sollten Sie Präfix verwenden, es sei denn, Sie wollen wirklich, dass die "side-effect" - Verhalten auswerten, dann Inkrement, die Sie von der postfix-version.
InformationsquelleAutor par
Wird, wie oben angegeben,
--n dekrementiert den Wert von n, bevor der Ausdruck ausgewertet wird.
n--; dekrementiert den Wert von n, nachdem der Ausdruck ausgewertet wird.
Die Sache hier zu beachten ist bei der Verwendung von while-Schleifen
Beispiel:
Als in n-- läuft die Schleife extra Zeit, während n = 1
Aber in --n 1 wird zuerst dekrementiert auf 0, und dann ausgewertet. Dies bewirkt, dass die while-Schleife zu brechen.
InformationsquelleAutor theredcap