» »

jezik C >> i++&++i >> razlika v for stavku

jezik C >> i++&++i >> razlika v for stavku

matic ::

Ni mi jasno pri Cju kaj je fora ce das i++ ali ++i v for stavku! Vem da ++i poveca "pred uporabo" i++ pa "po uporab"i ... ce dam:
for (i=0;i<1;++i)
printf(""%d",i);
dobim rezultat izpisa "0"
in ce dam:
for (i=0;i<1;i++)
printf(""%d",i);
dobim rezultat izpisa "0"! V cem je potem tukaj razlika ali je sploh ni ali..??

Senitel ::

V for zanki nima veze kerga daš. Če pa daš printf("%d",++i) ali printf("%d",i++), pa boš videl razliko...

jeti ::

Ampak če bi dal for(i=0;++i<10;), bi se tudi poznala razlika glede na for(i=0;i++<10;)
Bolje vrabec v roki kot (p)tič v riti!
Včasih je bil http://come.to/jeti

wintermute ::

Kadar je pre- ali post- increment "samostojeca" operacija, kot je v tvoji (maticevi) for zanki, je res skoraj vseeno (glej spodaj) katero varianto uporabis. Vrednost stevca se poveca in to je vse.

GEEK ALERT!!!

Med pre in post increment/decrement operatorjem obstaja pomembna razlika: pri post- varianti se (lahko) ustvari zacasna (temporary) spremenljivka, ki hrani originalno vrednost. To pa seveda ni potrebno, ce post increment/decrement operacija stoji sama zase (kot je tvoj primer v "update" delu for stavka). To compiler ve in stvar ustrezno optimizira.

Ampak: to velja samo za vgrajene tipe (int, char), drugace pa je pri uporabnisko definiranih tipih (aka razredih), ki imajo svoje verzije ++ in -- operatorjev. Tukaj je dejansko pomembno (glede hitrosti), da v taksnih primerih (npr. for zanka) uporabis pre-increment operator (++i namesto i++).

Da ne bo kdo mislil, da gre samo za teoreticno razglabljanje je tule implementacija pre in post increment operatorjev za razred vector&ltT&gt::iterator iz STL-ja.

// pre-increment
iterator& operator++()
{
_Inc();
return (*this);
}

// post-increment
iterator operator++(int)
{
iterator _Tmp = *this;
_Inc();
return (_Tmp);
}

Razlika je ocitna.

Povzetek: pre- operator ni nikoli pocasnejsi, lahko pa je v nekaterih primerih precej hitrejsi od post- increment/decrement operatorja. Torej, uporabljajte pre- varianto, razen tam kjer to ni mogoce.

END GEEK ALERT.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

IPad vs. macbook

Oddelek: Kaj kupiti
141684 (1079) Zheegec
»

Creativ d.o.o. - Vsaka stran, ki so jo naredili, ranljiva na isti SQLi

Oddelek: Informacijska varnost
111925 (1183) MisterR
»

Prenovljen Metasploit Decloak Engine

Oddelek: Novice / Zasebnost
53411 (2625) fiction
»

Prevod ang-slo

Oddelek: Loža
173047 (2752) d0rK
»

Longhorn ne bo maral iPoda

Oddelek: Novice / Apple iPhone/iPad/iPod
222827 (2827) mathjazz

Več podobnih tem