Przypisanie z postinkrementacją

0

Mam coś takiego:

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:

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.

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:

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

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