C: Hvad er forskellen mellem ++i og i++?

I C, hvad er forskellen på at bruge ++i og i++, og hvilken skal bruges i inkrementeringsblokken i en for-loop?

Løsning
  • ++i øger værdien af i og returnerer derefter den øgede værdi.

       i = 1;
       j = ++i;
       (i er 2, j er 2)
  • i++ øger værdien af i, men returnerer den oprindelige værdi, som i havde, før den blev øget.

       i = 1;
       j = i++;
       (i er 2, j er 1)

For en for-loop virker begge dele. ++i virker mere almindeligt, måske fordi det er det, der bruges i K&R.

Under alle omstændigheder skal du følge retningslinjen "foretrækker ++i frem for i++" og du vil ikke gå galt i byen.

Der'er et par kommentarer vedrørende effektiviteten af ++i og i++. I enhver compiler, der ikke er et studenterprojekt, vil der ikke være nogen ydelsesforskel. Du kan verificere dette ved at se på den genererede kode, som vil være identisk.

Spørgsmålet om effektivitet er interessant... her er mit forsøg på et svar:

Som On Freund bemærker, er det anderledes for et C++ objekt, da operator++() er en funktion, og compileren kan ikke vide at optimere væk oprettelsen af et midlertidigt objekt til at holde den mellemliggende værdi.

Kommentarer (14)

++i øger værdien og returnerer den derefter.

i++ returnerer værdien og forhøjer den derefter.

Det er en subtil forskel.

I en for-loop skal du bruge ++i, da det er lidt hurtigere. i++ vil oprette en ekstra kopi, som bare bliver smidt væk.

Kommentarer (2)

Grunden til at ++i kan være lidt hurtigere end i++ er, at i++ kan kræve en lokal kopi af værdien af i, før den øges, mens ++i aldrig gør det. I nogle tilfælde vil nogle compilere optimere det væk, hvis det er muligt ... men det er ikke altid muligt, og ikke alle compilere gør det.

Jeg forsøger ikke at stole for meget på compilatorernes optimeringer, så jeg ville følge Ryan Fox' råd: når jeg kan bruge begge dele, bruger jeg ++i.

Kommentarer (1)