====== Konstanty ====== Konstanta je pojmenovaná hodnota, která se nemění. Nejčastěji její hodnotu definujeme už v době překladu. Programovací jazyk C++ podporuje i konstantu definovanou za běhu. Pro všechny konstanty platí, že jejich hodnotu nelze po jejím nadefinování změnit. ===== Preprocesorová C konstanta ===== Preprocesorové konstanty se zpracovávají v první fázi překladu. Nemají žádný faktický vliv na paměť, protože se jedná pouze o automatizované nahrazení definovaného identifikátoru, obdobně jako by jste použili před kompilací příkaz editoru - najít a nahradit (//CTRL+H//) a nahradili konkrétní název za hodnotu. Nespornou výhodou je nulová alokace extra paměti, nevýhodou naopak, že není silně typovaná a kompilátor o ní nemá valné informace. #include #define PI 3.14159 // some code int main(/*...*/) { printf("Hodnota pi je %lf.\n", PI); } ===== Typovaná C++ konstanta ===== Jedná se o speciální proměnou označenou klíčovým slovem ''const'', kterou je třeba definovat hodnotou. Kompilátor se k takové hodnotě chová jako k proměnné, ale zabrání změnu její hodnoty. Znamená to, že fakticky existuje na nějakém místě v paměti. Kompilátor pak může lépe kontrolovat syntax/sémantiku kódu a optimalizovat ho. Tento typ konstanty je možné definovat i za běhu. Často se hodí pokud chceme něco na chvíli uložit pod vlastním identifikátorem a víme, že se daná hodnota nebude měnit. Kompilátor pak dokáže takovou konstantu optimalizovat pro lepší výkon. #include const double PI = 3.14159; // some code int main(/*...*/) { printf("Hodnota pi je %lf.\n", PI); int cislo; scanf("%d", &cislo); const int UZIV_KONSTANTA = cislo; printf("Konstanta definovana za behu je %d.\n", UZIV_KONSTANTA); }