Wieder eine dumme Frage.Führt Postfix Inkrement erhöhen nicht auf zurückgegebenen Wert?
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int i = 0;
i = i++;
cout<<i;
return 0;
}
ich 1
als Folge dieses Programms gedruckt, obwohl ich 0 erwartet: erste ein temporäres Objekt gleich 0 erstellt eing, dann wird i erhöht, dann Temp-Objekt zurückgegeben und i zugeordnet. Gerade nach:
5.2.6 Inkrement- und Dekrement [expr.post.incr] der Wert 1 erhalten, indem eine Postfix ++ Anwendung ist der Wert daß der Operand vor der Anwendung der Operator hatte. [Anmerkung: Der Wert erhält eine Kopie des Original Wert]
ich es unter MS VC 2008 und GCC geprüft. Sie geben beide das gleiche Ergebnis, obwohl mindestens gcc in der Inkrementierungszeichenfolge eine Warnung ausgibt. Wo liege ich falsch?
Könnten Sie bitte einen Prooflink zum Standard geben, warum dieser nicht definiert ist? Ich vermutete es, habe aber keinen Beweis gefunden. Und nur GCC bietet eine Warnung im "-Wall" -Modus. – flashnik
Das Ergebnis ist das gleiche auch ohne Optimierungen und im Debug-Modus. – flashnik
http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points/4176333#4176333 – ybungalobill