de-vraag
  • Otázky
  • Značky
  • Používatelia
Oznámenia
Odmeny
Registrácia
Po registrácii budete informovaní o odpovediach a komentároch na vaše otázky.
Prihlásiť sa
Ak už máte konto, prihláste sa a skontrolujte nové oznámenia.
Za pridané otázky, odpovede a komentáre budú udelené odmeny.
Viac na
Zdroj
Upraviť
 The.Anti.9
The.Anti.9
Question

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 2008-08-24T05:19:19+00:00 3
Mark Harrison
Mark Harrison
Edited question 16 júl 2019 в 10:29
Programovanie
c
for-loop
post-increment
pre-increment
This question has 1 odpoveď in English, to read them log in to your account.
Solution / Answer
Mark Harrison
Mark Harrison
24 august 2008 в 5:23
2008-08-24T05:23:18+00:00
Viac na
Zdroj
Upraviť
#8424766
  • ++i zvýši hodnotu i a potom vráti zvýšenú hodnotu.

       i = 1;
       j = ++i;
       (i je 2, j je 2)
  • i++ zvýši hodnotu i, ale vráti pôvodnú hodnotu, ktorú malo i pred zvýšením.

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

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 pred i++" a neurobíte chybu.

Existuje'niekoľko poznámok týkajúcich sa efektívnosti ++i a i++. 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ď: https://stackoverflow.com/questions/24886/is-there-a-performance-difference-between-i-and-i

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.

Mark Harrison
Mark Harrison
Edited answer 10 september 2019 в 8:30
996
0
Ryan Fox
Ryan Fox
24 august 2008 в 5:21
2008-08-24T05:21:21+00:00
Viac na
Zdroj
Upraviť
#8424765

++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í.

Yves M.
Yves M.
Edited answer 26 jún 2015 в 10:40
32
0
 OysterD
OysterD
24 august 2008 в 6:00
2008-08-24T06:00:53+00:00
Viac na
Zdroj
Upraviť
#8424768

Dôvodom, prečo ++i môže byť o niečo rýchlejšie ako i++, je to, že i++ 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.

Yves M.
Yves M.
Edited answer 26 jún 2015 в 10:41
20
0
Pridať otázku
Kategórie
Všetky
Technológia
Kultúra / Rekreácia
Život / Umenie
Veda
Profesionálne
Obchod
Používatelia
Všetky
New
Popular
1
365
Registered pred dňom
2
True Image
Registered pred dňom
3
archana agarwal
Registered pred 3 dňami
4
Maxim Zhilyaev
Registered pred 6 dňami
5
adambotsfford adambotsfford
Registered pred týždňom
DA
DE
EL
ES
FR
ID
IT
JA
KO
NL
PT
RU
SK
TR
ZH
© de-vraag 2022
Zdroj
stackoverflow.com
na základe licencie cc by-sa 3.0 s uvedením autora