#include <iostream>
using namespace std;
int main()
{
int i=10;
cout << i++ << " " << i++ << " " << i++;
return 0;
}
Dlaczego program po uruchomieniu wyświetla 12 11 10? Nie ogarniam tego.
#include <iostream>
using namespace std;
int main()
{
int i=10;
cout << i++ << " " << i++ << " " << i++;
return 0;
}
Dlaczego program po uruchomieniu wyświetla 12 11 10? Nie ogarniam tego.
Bo, krótko mówiąc, nie wiadomo, w której kolejności zostaną wykonane te trzy postinkrementacje.
Polecam artykuł Gynvaela, w którym jest też poruszane to zjawisko: http://gynvael.coldwind.pl/download.php?f=Programista_2012_C_CPP_cz_1.pdf
Bo to jest UB. Nie masz prawa wykonać na jednej zmiennej kilku niesekwencjonowanych operacji, z których co najmniej jedna jest operacją zapisu.
Z tego co wyczytałem z książki to jest zasada, że wartości są przypisywane z prawej strony do lewej.
Daje Nam to podniesienie ostatniej zmiennej 'i' o jeden, następnie przedostatnią i w końcu pierwszą od lewej :)
Z tego co wyczytałem z książki to jest zasada, że wartości są przypisywane z prawej strony do lewej.
Jest zasada, że w obrębie instrukcji zmienna nie może być modyfikowana więcej niż raz.
Niestety panowie, ale wszyscy tutaj poza lisu1411 wprowadziliście mnie błąd. To nie jest UB i da się to przewidzieć zachowanie programu. Operacje wykonywane są od prawej strony tak jak napisał lisu1411. Zresztą zobaczcie sobie na ten załącznik. To są moje zadania z egzaminu z informatyki na studiach.
Nie, Twojemu prowadzącemu, zamiast możliwości nauczania C++, przydałby się porządny kurs. A teraz zniszczę Ci świat: http://melpon.org/wandbox/permlink/g1WfPsVgIFORs5AY
A Visual Studio 2010 wyświetla
10 10 10
Muszę przeprosić;) nie miałem racji :)
"Operatory inkrementacji i dekrementacji nie należy nadużywać i inkrementować lub dekrementować tej samej wartości w jednym wyrażeniu niż raz. Chodzi o to, że wtedy zasada zmień-potem-użyj lub użyj-potem-zmień stają się niejednoznaczne. Może ona dać różne wyniki w różnych implementacjach C++. język w ogóle nie określa prawidłowej interpretacji tego typu wyrażenia."
Język C++ Szkoła programowania Wydanie VI, Stephen Prata