Inkrementacja, dziwne działanie programu (przynajmniej dla mnie)

0
 #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.

3

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

5

Bo to jest UB. Nie masz prawa wykonać na jednej zmiennej kilku niesekwencjonowanych operacji, z których co najmniej jedna jest operacją zapisu.

1

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 :)

1

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.

0

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.

11

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

5

A Visual Studio 2010 wyświetla

10 10 10
2

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1