Forum » Programiranje » 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..??
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
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<T>::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.
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<T>::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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | IPad vs. macbookOddelek: Kaj kupiti | 1672 (1067) | Zheegec |
» | Creativ d.o.o. - Vsaka stran, ki so jo naredili, ranljiva na isti SQLiOddelek: Informacijska varnost | 1915 (1173) | MisterR |
» | Prenovljen Metasploit Decloak EngineOddelek: Novice / Zasebnost | 3390 (2604) | fiction |
» | Prevod ang-sloOddelek: Loža | 3032 (2737) | d0rK |
» | Longhorn ne bo maral iPodaOddelek: Novice / Apple iPhone/iPad/iPod | 2809 (2809) | mathjazz |