Inkrementace, dekrementace
Inkrementace ++
a dekrementace - -
jsou operátory, které zvětší, resp. sníží hodnotu proměnné o hodnotu 1.
Velmi se používají například v cyklech for
.
Můžeme je nahradit standardním operátorem přiřazení. Příkaz x++;
je ekvivalentní příkazu x = x + 1;
.
Příklad
int cislo = 41; cislo++; printf("%d\n", cislo); cislo--; printf("%d\n", cislo);
Výstupem tohoto kódu bude:
42 41
Prefixová a postfixová syntaxe
Oba tyto operátory se dají použít jak v prefixové formě: ++n;
, tak i v postfixové formě: n++
. Rozdíl těchto dvou syntaxí je okamžik, kdy dojde k přičtění/odečtění jedničky.
Prefixová syntaxe změní hodnotu referované proměnné před vyhodnocením výrazu. Postfixová syntaxe změní hodnotu referované proměnné po vyhodnocení výrazu.
Příklad prefix vs postfix
int x = 41; printf("%d\n", ++x); if (x-- == 42) puts("Foo");
Výstupem tohoto kódu bude:
42
Foo
Protože hodnota 41 je inkrementována předtím, než je vypsána. A v příkazu if
je její hodnota zmenšena až po vyhodnocení podmínky.
Limitace použití těchto operátorů
Funkce těchto operátorů je v C/C++ značně omezená a snadno můžeme dosáhnout nedefinovaného chování, které někdy nebude kompilátorem vyhodnoceno jako chybné, ale výsledek se může na jiném systému značně lišit. Proto dbáme na to, ať používáme jen jeden operátor inkrementace/dekrementace v rámci jednoho výrazu
Několik příkladů nesprávného použití
++a++;
++(++i);
a+++++b;