W języku C++ mamy do dyspozycji specyfikator const, który wykorzystujemy w mechanizmie kontroli błędów na etapie kompilacji oraz w celu poprawienia jakości kodu. Przy wskaźnikach może on pojawić się dla określenia samego wskaźnika lub obiektu, na który ten wskaźnik pokazuje. Popatrzmy na te dwie definicje:
char *const imie = "Piotr"; const char *nazwisko = "Grabowski";W pierwszym przypadku mamy do czynienia ze stałym wskaźnikiem, tzn. wskaźnikiem nieruchomym, który raz ustawiony nie może być przestawiony na inny obiekt. Tego typu wskaźnik należy bezwzględnie zainicjalizować w trakcie definicji. To jedyny moment, kiedy można przypisać mu adres jakiegoś obiektu. Od tej pory ten adres - u nas jest to adres stringa - zostaje zamrożony i nie można go zmienić.
Natomiast drugi wskaźnik odnosi się do obiektu, który uznaje za stały. Nie można więc tego obiektu modyfikować za pośrednictwem takiego wskaźnika, chociaż np. za pomocą zwykłego wskaźnika można byłoby to zrobić.
Te dwa typy wskaźników można połączyć w jedną całość. Powstanie wówczas stały (nieruchomy) wskaźnik do stałego (niezmiennego) obiektu. W programie wskconst.cpp znajduje się przykład takiej hybrydy.