Viac na
C: Aký je rozdiel medzi ++i a i++?
Aký je v jazyku C rozdiel medzi použitím ++i
a i++
a ktorý z nich by sa mal použiť v inkrementačnom bloku cyklu for
?
813
3
++i
zvýši hodnotui
a potom vráti zvýšenú hodnotu.i++
zvýši hodnotui
, ale vráti pôvodnú hodnotu, ktorú maloi
pred zvýšením.Pre cyklus
for
funguje obidve možnosti. Zdá sa, že++i
je bežnejší, možno preto, že sa používa v K&R.V každom prípade sa riaďte pokynom "uprednostnite
++i
predi++
" a neurobíte chybu.Existuje'niekoľko poznámok týkajúcich sa efektívnosti
++i
ai++
. V každom kompilátore, ktorý nie je študentským projektom, nebude žiadny výkonnostný rozdiel. Môžete si to overiť pohľadom na vygenerovaný kód, ktorý bude identický.Otázka efektivity je zaujímavá... tu je môj pokus o odpoveď:
Ako poznamenáva On Freund, v prípade objektu C++ je to iné, pretože
operátor++()
je funkcia a kompilátor nemôže'vedieť optimalizovať vytvorenie dočasného objektu na uchovávanie medziproduktu.++i
zvýši hodnotu a potom ju vráti.i++
vráti hodnotu a potom ju zvýši.Je to jemný rozdiel.
Pre cyklus for použite
++i
, pretože je to o niečo rýchlejšie.i++
vytvorí extra kópiu, ktorá sa jednoducho vyhodí.Dôvodom, prečo
++i
môže byť o niečo rýchlejšie akoi++
, je to, žei++
môže vyžadovať lokálnu kópiu hodnoty i pred jej inkrementáciou, zatiaľ čo++i
nikdy. V niektorých prípadoch to niektoré kompilátory optimalizujú, ak je to možné... ale nie vždy je to možné a nie všetky kompilátory to robia.Snažím sa príliš nespoliehať na optimalizáciu kompilátorov, takže by som sa riadil'radou Ryana Foxa: keď môžem použiť oboje, použijem
++i
.