Izgleda da je krajnje vreme da se kupi standard za C++.
Kao što je opšte poznato, i = i++ je izraz koji se podvodi pod „nedefinisano ponašanje“ pa je svaki rezultat operacije prihvatljiv.
Ali, to koliko vidim nije isto kao i:
a = arg[a]++.
Što se tiče redosleda izvršavanja, [] ima veći prioritet nego ++, prema standardu.
Citat:
filmil: VC++ pristupa a[0], ali ga ne povecava (a = arr[a]++; ) vec prvo sa ++ poveca a, pa radi referenciranje arr[a] ?!?!
To bi bilo kršenje semantike jezika. ++ uvećava izraz koji je njegov argument. Koliko vidim, VC++ pri računanju izraza ispravno dodeli a = 1, ali zatim kada računa adresu izraza kog treba inkrementirati koristi novu vrednost a za indeksiranje. Koliko sam video u nezvaničnim člancima koji se mogu pronaći na Guglu, to _nije_ ono što bi trebalo da se dogodi. Jer naime:
a = b++;
treba da inkrementira promenljivu b, koja god ona bila. U gornjem izrazu se može videti da se b preslikava u arg[0] tako da bi trebalo da se inkrementira arg[0], bez obzira što je a promenilo vrednost u međuvremenu. Ali naravno, neformalni članci se komotno odnose prema ovim finesama, a C standarda bez plaćanja nema ni od korova — čak ni u biblioteci!
f