ich die folgenden Programme in Visual C renne ++ und Java:Verhalten von Vorinkrement und Postinkrement Operator in C und Java
Visual C++
void main()
{
int i = 1, j;
j = i++ + i++ + ++i;
printf("%d\n",j);
}
Ausgang:
6
Java:
public class Increment {
public static void main(String[] args) {
int i = 1, j;
j = i++ + i++ + ++i;
System.out.println(j);
}
}
Ausgang:
7
Warum der Ausgang in diesen beiden Sprachen unterschiedlich sind? Wie behandeln die beiden Sprachen pre- und postincrement-Operatoren anders?
In C und C++ sind die Reihenfolge, in der Ausdrücke ausgewertet werden, und die Reihenfolge, in der die Nebenwirkungen angewendet werden, * unspezifiziert *; Das Ergebnis wird von Implementierung zu Implementierung variieren. Die entsprechenden Standards lassen ein solches Verhalten * undefiniert *, so dass der Compilerimplementierer sich nicht darum kümmern muss, wie er mit solchen Ausdrücken umgehen soll; Jedes Ergebnis wird als "korrekt" betrachtet. Java und C#, OTOH an, dass alle Ausdrücke von links nach rechts ausgewertet werden und dass alle Nebenwirkungen sofort angewandt werden, so Ausdrücke wie diese sind gut definiert. –