Niektóre zastosowania const naprawdę nie ma większego sensu.
Załóżmy, że mamy następującą funkcję:
void myFunction (const int value);
const informuje kompilator, że wartość ta nie musi zmieniać wewnątrz funkcji. Ta informacja nie ma żadnej wartości dla dzwoniącego.Od funkcji zależy decyzja co zrobić z wartością. Dla rozmówcy, dwa następujące definicje funkcji zachowują się dokładnie tak samo dla niego:
void myFunction (const int value);
void myFunction (int value);
Ponieważ wartość jest przekazywane przez wartość, co oznacza, że funkcja dostaje lokalną kopię tak.
Z drugiej strony, jeśli argument jest odniesieniem lub wskaźnikiem, rzeczy stają się bardzo różne.
void myFunction (const MyClass &value);
Mówi rozmówcę, że wartości przekazywane przez referencję (tak za ekranach to faktycznie wskaźnik), ale rozmówca nie zapowiada, aby zmienić wartość. To samo odnosi się do wskaźników:
void myFunction (const MyClass *value);
Mijamy wskaźnik do MojaKlasa (ze względów wydajności), ale funkcja nie zapowiada, aby zmienić wartość.
Jeśli chcemy napisać następujące:
void myFunction (MyClass * const value);
Potem wracamy int raz pierwszy sytuacja. myFunction pobiera wskaźnik, który jest przekazywany przez wartość, a który jest const. Ponieważ funkcja MyFunction pobiera kopię wartości wskaźnika, nie ma znaczenia dla wywołującego, czy jest ona stała, czy nie. Najważniejszą rzeczą jest to, że moja funkcja może zmieniać zawartość wartości, ponieważ sama zmienna wskaźnika jest stała, ale zawartość w niej nie jest.
To samo odnosi się do wartości zwracanej:
const double squareRoot(double d);
To nie ma żadnego sensu. squareRoot zwraca const double, ale ponieważ jest przekazywana "według wartości", a zatem musi być skopiowana do mojej własnej zmiennej lokalnej, mogę zrobić, co zechcę.
Z drugiej strony:
const Customer *getCustomer(char *name);
mi mówi, że mnie getCustomer zwraca wskaźnik do klienta, a nie wolno mi zmienić zawartość klienta.
Rzeczywiście, byłoby lepiej, aby const char-pointer-zawartości, jak również, ponieważ nie spodziewam funkcja zmienić dany ciąg:
const Customer *getCustomer(const char *name);
sobie sprawę, że const funcs członkowskie mają nic wspólnego z parametrów modyfikujących, ale o modyfikację zmiennych klasy. – Jor