v jakém pořadí a jak se provádí výpočet u takovéhodle vzorce?zkrátka jak se to vyhodnocuje?..podle knižky to prostě nechápu. chápu že ++a se přičte 1 před použitím , a a++ po použití. ale u takovýhohle vzorce nevím jak k tomu počitač dojde.
#2Panda38
díky. teprve teď když vidím ten vzorec s tím popisem to už chápu líp.
takže jedinou tu proměnou "a" vlastně nezvýší(inkrementace až po tom co ji použije ve vzorci poprvé)(konkrétně u tohoto příkladu).takže pokud by byl tenhle vzorec zařazen do nějaké opakující se podmínky ,tak by se to "a" zvýšilo o 1 až napodruhé. jestli to chápu úplně.?
#3nikola18
Podle toho, jestli ++ pouzijes pred nebo za, se rozlisuje takzvana pre-inkrementace a post-inkrementace. Je to takove "vizualni" znazorneni, ze se pripocteni 1 provede pred tim, nez se ziska hodnota, nebo az pote, co se ziska hodnota.
Kazdopadne neni moc dobry napad pouzivat cokoliv, co zpusobuje "side effect" ve vzorcich (meni hodnotu pouzite promenne). Tady je nastesti kazda promenna pouzita jen jednou, ale pokud by se pouzilo neco jako a++ * ++a, tak je to z hlediska C++ nedefinovane chovani a vysledek muze byt na kazdem prekladaci jiny. To same ve volani funkce(a, ++a). Ostatne poradi vyhodnocovani parametru je taktez nespecifikovane a ruzne prekladace to maji ruzne (mozna to uz resi nejaky z novejsich c++ standardu?).
Nahlásit jako SPAM
IP: 185.163.40.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Jednoduché vzorce (jako posloupnost * a /) by se sice měly počítat vždy zleva doprava, ale jo raději to do výrazů moc nemíchat když se neví jistě. Úplný průšvih je inkrementace ukazatelů, jako např. *s++ = *s+1. MS VC vyhodnocuje nejdříve pravou stranu, zatímco GCC nejdříve levou, tak se výsledky liší.