sto correndo i seguenti programmi in Visual C++ e Java:Comportamento di preincremento e il post-operatore in C e Java
Visual C++
void main()
{
int i = 1, j;
j = i++ + i++ + ++i;
printf("%d\n",j);
}
uscita:
6
Java:
public class Increment {
public static void main(String[] args) {
int i = 1, j;
j = i++ + i++ + ++i;
System.out.println(j);
}
}
uscita:
7
Perché l'uscita in queste due lingue sono diverse? In che modo entrambe le lingue trattano gli operatori di pre e postincremento in modo diverso?
In C e C++, l'ordine in cui vengono valutate le espressioni e l'ordine in cui vengono applicati gli effetti collaterali sono * * non specificato; il risultato varierà dall'implementazione alla realizzazione. I rispettivi standard lasciano un simile comportamento * indefinito * in modo che l'implementatore del compilatore non debba preoccuparsi di come gestire tali espressioni; qualsiasi risultato è considerato "corretto". Java e C#, OTOH, specificano che tutte le espressioni vengono valutate da sinistra a destra e che tutti gli effetti collaterali vengono applicati immediatamente, quindi espressioni come questa sono ben definite. –