ccpp:inc-dec

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;.

int cislo = 41;
cislo++;
printf("%d\n", cislo);
cislo--;
printf("%d\n", cislo);

Výstupem tohoto kódu bude:

42
41

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.

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.

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;
  • ccpp/inc-dec.txt
  • Poslední úprava: 2024/01/03 09:49
  • autor: bures