C: Hva er forskjellen mellom ++i og i++?
I C, hva er forskjellen mellom å bruke ++i
og i++
, og hvilken skal brukes i inkrementeringsblokken i en for
-løkke?
813
3
I C, hva er forskjellen mellom å bruke ++i
og i++
, og hvilken skal brukes i inkrementeringsblokken i en for
-løkke?
++i
vil inkrementere verdien avi
, og deretter returnere den inkrementerte verdien.i++
vil inkrementere verdien avi
, men returnere den opprinnelige verdien somi
hadde før den ble inkrementert.For en
for
løkke fungerer begge.++i
virker mer vanlig, kanskje fordi det er det som brukes i K&R.I alle fall, følg retningslinjen "foretrekker
++i
overi++
" og du vil' ikke gå galt.Det er et par kommentarer angående effektiviteten til
++i
ogi++
. I en hvilken som helst kompilator som ikke er studentprosjekt, vil det ikke være noen ytelsesforskjell. Du kan bekrefte dette ved å se på den genererte koden, som vil være identisk.Effektivitetsspørsmålet er interessant ... her er mitt forsøk på et svar:
Som On Freund notater, det er annerledes for et C++-objekt, siden
operator++()
er en funksjon, og kompilatoren kan ikke vite å optimalisere bort opprettelsen av et midlertidig objekt for å holde mellomverdien.++i
inkrementerer verdien og returnerer den deretter.i++
returnerer verdien, og inkrementerer den deretter.Det er en subtil forskjell.
For en for-sløyfe, bruk
++i
, da det er litt raskere.i++
vil opprette en ekstra kopi som bare blir kastet bort.Grunnen til at
++i
kan være litt raskere enni++
er ati++
kan kreve en lokal kopi av verdien til i før den blir inkrementert, mens++i
aldri gjør det. I noen tilfeller vil noen kompilatorer optimalisere det bort hvis mulig ... men det er ikke alltid mulig, og ikke alle kompilatorer gjør dette.Jeg prøver å ikke stole for mye på kompilatoroptimaliseringer, så jeg følger Ryan Foxs råd: når jeg kan bruke begge deler, bruker jeg
++i
.