Inkrement ++i, i++ und i+=1
Ich bin Anfänger in C++. Was ich verstehe ist, dass:-
i++ ausgeführt wird, den ersten, dann Inkrement, ++i ist das Inkrement zuerst, dann ausführen,i+=1 um 1 erhöht,dann ausführen. Aber in der FOR-Schleife:
for (i=0;i<10;i++)
for (i=0;i<10;++i)
Gibt es wirklich keinen Unterschied in diesen beiden Schleifen oben.
Hier ist ein weiteres zur Berechnung der Summe aller ganzen zahlen von 1 bis 100:
int i=1, sum=0;
while (i<=100)
{
sum+=i;
i++; //i+=1; ++i;
}
cout<<sum<<" "<<i<<endl;
return 0;
Aber wenn ich die Stelle i++ mit i+=1 oder ++i, Sie alle wieder eine Summe von 5050 und ich der 101. Also ich sehe wirklich nicht, einen Unterschied in Ihnen.
So kann jemand erklären mir das an? Die eine von denen ist, die am meisten genutzt in der Programmierung? Danke!!!!
"i++ ausgeführt wird, den ersten, dann Inkrement, ++i ist das Inkrement zuerst, dann ausführen,i+=1 um 1 erhöht,dann ausführen" - gefährlich falsch.
In der Tat, außer wenn diese Operatoren sind überladen, da
i++
ist "erhöht und auszuwerten, um den ursprünglichen Wert"; es gibt keine Spezifikation von dem, was passiert "ersten".In der Tat, außer wenn diese Operatoren sind überladen, da
operator++
zurückkehren muss, bevor der Ausdruck als ausgewertet. Das ist, warum pre-Inkrement/Dekrement ist oft bevorzugt - es gibt keine Notwendigkeit, erstellen Sie eine Kopie des ursprünglichen Objekts.InformationsquelleAutor user3858 | 2014-01-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, wenn Sie sich vorstellen, wie die for-Schleife funktioniert, können Sie verstehen, das problem bei der hand.
for-Schleife
**
increment i
bedeuteti++
oder++i
i++
können, werden durch diese ersetzt :temp
wird nutzlos sein, hier also der compiler optimiert es nurinc i
Unterricht. auch wenn Sie es nicht tun, dasstemp
ist nur eine Verschwendung von Speicherplatz, das ist alles.++i kann ersetzt werden durch
wieder temp ist nicht erforderlich, so wird der compiler nur ersetzen Sie es mit
inc i
Unterricht.wenn Sie sehen, dass beide die Anweisung sind die gleichen, weil Sie nicht zugewiesen wird, nichts. nur
i
wird durch die betroffenen erhöhen. also beide sind im wesentlichen die gleichen. dies gilt, wenni
ist ein built-in-Typ .sehen Sie, dass die Inkrement-Anweisung platziert wird, nachdem der Körper der Schleife? können Sie nun sehen, dass dies fast das gleiche wie die while-Schleife, dass Sie zeigte?
es ist immer schön, zu denken, Schleifen in dieser Art und Weise.
InformationsquelleAutor Koushik Shetty
Sind Sie richtig. In deinen Beispielen gibt es keinen Unterschied.
Aber hier ist es:
vs
Meisten der Zeit,
++
ist die einzige operation, die in der Anweisung (FYI, einefor
- Schleife hat drei Aussagen).Wenn nicht, dann ist es vielleicht egal, und Sie verwenden, je nachdem was man gibt Ihnen das richtige Verhalten.
FYI
Einige Entwickler sind der Meinung, dass wenn die pre-und postfix-Operatoren sollten immer allein verwendet werden (nicht Teil eines großen-Anweisung). Sie führen zu verwirrenden Codes, oder sogar Undefiniertes Verhalten.
Beispielsweise
ist Undefiniertes Verhalten.
for loop
und zeigen Sie ihm genau, wie es vorgestellt werden kann. das gibt eine solide Grundlage.InformationsquelleAutor Paul Draper
Was
i++
tut, ist die Rückkehr der aktuelle Wert voni
und erhöhen Sie es, indem Sie eine, und++i
erste Inkrementi
durch1
und gibt dann den Wert voni
.Werfen Sie einen Blick auf diese, zum Beispiel:
Beide benutzt werden, je nachdem, was Sie wollen oder sein können, wie Sie wollen.
Eine weitere Sache zu beachten:
++i
ist ein l-Wert, aberi++
ist nicht. Für details siehe hierIch versuchte zu erklären, mit dem code etwas falsch?
Sie zeigen nur etwas code, ohne zu erklären oder beantworten jede Frage überhaupt. Während die code-Erklärung, die vielleicht für dich offensichtlich, es ist nicht für diejenigen, die es Lesen.
Danke für den edit @Jefffrey
Kein problem. Nur denken Sie daran, nicht zu geben, nichts für selbstverständlich, wenn die Beantwortung. 😉
InformationsquelleAutor deeiip
Ihre Analyse ist richtig.
i++
wird wieder den Wert deri
, dann erhöht, in der Erwägung, dass++i
wird, erhöht sich der Werti
, dann der neue Wert wird zurückgegeben.i += 1
wird das gleiche tun wie++i
. Der Unterschied in wo Sie verwendet werden, im eigentlichen code ist in Erster Linie situativ, es gibt keine bestimmte Antwort auf die Frage, wo jeder von Ihnen am häufigsten verwendet oder hilfreich. Es hängt alles davon ab, was Sie tun möchten.Hier ein erfundenes Beispiel für eine Zeit mag es nützlich sein, verwenden Sie den post-Inkrement (
i++
form):Wenn Sie wollte, um wieder die Länge, ohne das null-byte, könnten Sie ändern das obige Beispiel etwas, mit dem
++i
form:Als für
i += 1
ich glaube nicht, dass ich je gemacht habe, ganz so, da kann man pre - oder post-Inkrement statt. Ich habe in der Regel nur die zusammengesetzten Zuweisungsoperatoren für andere Werte als 1.InformationsquelleAutor Brian Gradin