Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Wstępne info:
- int a = 15;
- int b = 20;
- a = b++;
- Wynik: a = 20, b = 21, czyli:
- najpierw do a zostanie przypisane b, a potem b się zwiększa.
- ALE
- int a = 15;
- a = a++;
- wynik to a = 15. a++ się w ogóle nie wykona
- (undefined behaviour, source: https://stackoverflow.com/questions/949433/why-are-these-constructs-using-pre-and-post-increment-undefined-behavior/949443#949443 )
- --------------------------
- Wersja 2:
- int a = 10, b = 15, c = 5;
- a = b < c ? a++ : b++;
- rezultat: a = 15, b = 16, c = 5
- Kolejność:
- 1. Najpierw porównanie b < c (czyli 15 < 5)
- 2. Porównanie daje wynik false
- 3. Jako że false, to do 'a' zostaje przypisane to co w false czyli 'b++', czyli:
- a = b++ się wykonuje (postinkrementacja wykonuje się po przypisaniu do a, czyli zostanie przypisane najpierw 15 a potem zwiększone b o 1)
- Wersja 1:
- int a = 10, b = 15, c = 5;
- b = a < c ? a++ : b++;
- rezultat: a = 10, b = 15, c = 5
- Kolejność:
- 1. Najpierw porównanie a < c (czyli 10 < 5)
- 2. Porównanie daje false
- 3. Jako że false, to do b zostanie przypisane to co jest w false, czyli b++:
- wykonuje się b = b++
- czyli b się nie zmienia (undefined behaviour)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement