Ich habe einen Freund, die anderen Ausgang ist immer, als ich für das folgende Programm zu tun:Seltsam Nachinkrement Verhalten in C++
int main() {
int x = 20, y = 35;
x = y++ + x++;
y = ++y + ++x;
printf("%d%d", x, y);
return 0;
}
ich Ubuntu benutze und habe mit gcc und Klirren versucht. Ich bekomme 5693
von beiden.
Mein Freund verwendet Visual Studio 2015 und erhält 5794
.
Die Antwort, die ich bekommen (5693
) macht am meisten Sinn für mich, da:
- die erste Zeile setzt
x = x + y
(diex = 20+35 = 55
ist) (Anmerkung:x
wurde erhöht, aber über oben zugewiesen, so doesn ‚t Angelegenheit) y
wurde erhöht, und ist deshalb36
- nächste Zeile erhöht sowohl das Ergebnis auf und legt es als
y
(diey = 37 + 56 = 93
) - die
56
und93
, wäre so die Ausgabe5693
ist ich die VS Antwort macht Sinn, wenn die Post-Inkrement nach der Zuweisung geschehen sehen konnte. Gibt es eine Spezifikation, die eine dieser Antworten richtiger macht als die andere? Ist es nur zweideutig? Sollten wir jemanden entlassen, der einen solchen Code schreibt und die Mehrdeutigkeit irrelevant macht?
Hinweis: Zunächst haben wir nur mit gcc versucht, gibt jedoch Klirren diese Warnung:
[email protected]:~/playground$ clang++ strange.cpp
strange.cpp:8:16: warning: multiple unsequenced modifications to 'x' [-Wunsequenced]
x = y++ + x++;
~ ^
1 warning generated.
GCC [gibt mir Warnungen] (http://coliru.stacked-crooked.com/a/c7c7667511ece841). Stellen Sie sicher, dass Sie eine relativ aktuelle Version verwenden und Warnungen aktiviert haben. – chris