Pytanie jak w temacie, często w przeróżnych tutorialach (o C++, bo akurat nim się bawię ale to ma pewnie zastosowanie w każdym innym języku) ich autorzy w przykładach programów używają stałych np.
const int ILOSC = 5;
zamiast napisać samą ‘piątkę’ tam gdzie chcemy ją umieścić, dajmy na to w tablicy.
Na przykładzie: masz tablicę 5 elementów i dalej w programie musisz kilka razy po niej iterować. Nagle chcesz zmienić rozmiar tablicy na 4 elementy - musisz to też zrobić w warunkach tych kilku pętel. Zapomnisz o jednym i już cały program działa nie tak, jak trzeba
Stałe są po to, by nie trzeba było pamiętać, ile tablica ma elementów, jaki ciąg znaków odpowiada czemuś(vide Java) czy jakichś magicznych wartości. Ułatwia to jakiekolwiek zmiany(np. przytoczony przeze mnie przykład z tablicą) i stałe(czy w ogóle identyfikatory) są refactor-friendly(da się jednoznacznie wyszukać je w kodzie i np. zamienić, czego nie da się zrobić z np. liczbą).
Traktuje się je podobnie jak zmienne (tzn w podobny sposób, bez babrania się z prekompilatorem), tyle że mają wartość znaną w momencie kompilacji. W połączeniu z funkcjami const mogą posłużyć do skrócenia czasu wykonywania kodu kosztem czasu kompilacji - obliczenia tych funkcji wykona w momencie kompilacji, nie wykonania (o ile to możliwe).
Jest to więc głownie informacja dla kompilatora, że to stała wartość i wszędzie ma ją wkleić w momencie kompilacji. Innego sensu stałe nie mają - chyba że ktoś na chama chce zablokować możliwość zmiany wartości.
W skrajnych wypadkach kompilator sam oznacza pewne zmienne jako stałe i odwala całą robotę w czasie kompilacji