Przypisanie z postinkrementacją

Przypisanie z postinkrementacją
Hodor
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 337
0

Mam coś takiego:

Kopiuj
int y = 10, x = 15;
y = x++;
printf("y = %d x = %d", y, x);

Output: y = 15, x = 16
Tutaj mi się wszystko zgadza: do y zostanie przypisany x++ czyli tak naprawdę zostanie przypisany x, który później się zwiększa o 1.

Ale jak mam coś takiego:

Kopiuj
int x = 15;
x = x++;
printf("x = %d", x);

Output: x = 15

Dlaczego tak się dzieje? Z mojej perspektywy powinno to zadziałać tak: do x zostanie przypisany x++ (czyli się nie zmieni), ale później (tak jak analogicznie przykład wyżej) to x powinno mimo wszystko zostać zwiększone o 1. Czyli spodziewałbym się outputu x = 16.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
4

W C i w C++ jest to undefined behavior (gdzieś czytałem, że nowsza wersja C++20/17 ma ściele uregulować(ła) takie przypadki, nie mogę znaleźć źródła).
https://stackoverflow.com/a/949443/1387438

Zależnie od kompilatora możesz uzyskać różne wyniki.
Inne przypadki tego typu:

Kopiuj
a = ++b + ++b;
a = c[b++] + c[b++];

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.