Ich weiß, dass das bekannt vorkommt, aber es ist mir ein Problem in einem Test von Microsoft, um Praktikanten anzuwerben. Es scheint mir, dass y=++y
nicht standardkonform ist, aber ich denke, es wäre vielleicht besser, sicher zu sein (nicht sicher, ob ich besser bin als diejenigen, die diese Tests bei MS schreiben). Also ich frage deinen Rat. Glauben Sie, dass solche Ausdrücke standardkonform sind und nicht zu undefiniertem Verhalten führen?`y = ++ y`, entspricht dieser Standard? [das erscheint in einem Test von Microsoft]
#include <stdio.h>
int main(){
int a = 10;
int b = 10;
a = ++a; //What ???
b = b++; //What ???
printf("%d %d\n",a,b);
return 0;
}
gcc
beschwert sich darüber, wenn sie mit -Wsequence-point
kompilieren verwendet. (Es wird nicht explizit angegeben, ob es sich um eine C oder C++ spezifische Problem.)
Aber nur vier Antworten zur Verfügung gestellt:
a) 10 10
b) 11 10
c) 10 11
d) 11 11
Obwohl man nicht nur eine Antwort auswählen eingeschränkt (so vielleicht sollte ich wählen? alle vier?)
Nun, meiner Meinung nach gibt es zwischen Selbstinkrementierung und Zuweisung keinen Sequenzpunkt. Das verstößt also gegen die Spezifikation. Nicht wahr?
Wollen Sie Ihre Antwort in Bezug auf C++ 03 oder C++ 11? Sie denken über dieses Zeug auf verschiedene Arten nach. –
Sie sind richtig. Dies ist ein nicht definiertes Verhalten. – Art
Ja, es ist UB, aber ich würde immer noch b) als Antwort wählen: P –