Ho avuto il mio cervello rugosa dal cercare di capire gli esempi in questa pagina: http://answers.yahoo.com/question/index?qid=20091103170907AAxXYG9In che modo l'ordine di valutazione delle espressioni differisce tra C++ e Java?
In particolare questo codice:
int j = 4;
cout << j++ << j << ++j << endl;
dà una potenza: 566
Ora questo ha un senso per me se l'espressione viene valutata da destra a sinistra, tuttavia in Java un'espressione simile:
int j = 4;
System.out.print("" + (j++) + (j) + (++j));
fornisce un'uscita di: 456
Quale è più intuitivo perché indica che è stato valutato da sinistra a destra. Facendo una ricerca su vari siti, sembra che con C++ il comportamento differisca tra i compilatori, ma non sono ancora convinto di aver capito. Qual è la spiegazione di questa differenza di valutazione tra Java e C++? Grazie COSÌ.
Tutto è diverso. Non è solo diverso tra i compilatori, è _against the rules_, e può cambiare ogni volta che si compila sullo stesso compilatore, ogni volta che si esegue il programma, o anche ogni volta che viene eseguita la riga. –
possibile duplicato di [In che modo undefined è un comportamento indefinito?] (Http://stackoverflow.com/questions/7961067/how-undefined-is-undefined-behavior) –
C++ è progettato per essere ottimizzato, il che significa che lo standard non garantire certi risultati in modo che il compilatore sia libero di generare codice ottimale. La sequenza che usi nel tuo esempio è una che credo sia specificamente vietata. –