Advertisement
Guest User

Untitled

a guest
May 19th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. Wstępne info:
  2. int a = 15;
  3. int b = 20;
  4. a = b++;
  5. Wynik: a = 20, b = 21, czyli:
  6. najpierw do a zostanie przypisane b, a potem b się zwiększa.
  7.  
  8. ALE
  9.  
  10. int a = 15;
  11. a = a++;
  12. wynik to a = 15. a++ się w ogóle nie wykona
  13. (undefined behaviour, source: https://stackoverflow.com/questions/949433/why-are-these-constructs-using-pre-and-post-increment-undefined-behavior/949443#949443 )
  14.  
  15. --------------------------
  16.  
  17. Wersja 2:
  18.  
  19. int a = 10, b = 15, c = 5;
  20. a = b < c ? a++ : b++;
  21.  
  22. rezultat: a = 15, b = 16, c = 5
  23.  
  24. Kolejność:
  25. 1. Najpierw porównanie b < c (czyli 15 < 5)
  26. 2. Porównanie daje wynik false
  27. 3. Jako że false, to do 'a' zostaje przypisane to co w false czyli 'b++', czyli:
  28. a = b++ się wykonuje (postinkrementacja wykonuje się po przypisaniu do a, czyli zostanie przypisane najpierw 15 a potem zwiększone b o 1)
  29.  
  30. Wersja 1:
  31.  
  32. int a = 10, b = 15, c = 5;
  33. b = a < c ? a++ : b++;
  34.  
  35. rezultat: a = 10, b = 15, c = 5
  36.  
  37. Kolejność:
  38. 1. Najpierw porównanie a < c (czyli 10 < 5)
  39. 2. Porównanie daje false
  40. 3. Jako że false, to do b zostanie przypisane to co jest w false, czyli b++:
  41. wykonuje się b = b++
  42. czyli b się nie zmienia (undefined behaviour)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement