Некоторые применения const на самом деле не имеют особого смысла.
Предположим, у вас есть следующая функция:
void myFunction (const int value);
const сообщает компилятору, что значение не должно изменяться внутри функции,Эта информация не имеет никакого значения для звонящего.Это зависит от самой функции, чтобы решить, что делать со значением.Для вызывающей стороны следующие два определения функций ведут себя одинаково для него:
void myFunction (const int value);
void myFunction (int value);
Поскольку значение передается по значению, это означает, что функция все равно получает локальную копию.
Вкл.с другой стороны, если аргумент является ссылкой или указателем, все становится совсем иначе.
void myFunction (const MyClass &value);
Это говорит вызывающей стороне, что значение передается по ссылке (поэтому за экранами это фактически указатель), нозвонящий обещает не менять значение.То же самое верно для указателей:
void myFunction (const MyClass *value);
Мы передаем указатель на MyClass (из соображений производительности), но функция обещает не изменять значение.
Если мы напишемследующее:
void myFunction (MyClass * const value);
Тогда мы вернемся в первую ситуацию.myFunction получает указатель, который передается по значению, и который является const.Поскольку MyFunction получает копию значения указателя, для вызывающей стороны не имеет значения, является ли оно константным или нет.Самое главное, что myFunction может изменять содержимое значения, поскольку сама переменная-указатель является константой, а содержимое в ней - нет.
То же самое верно для возвращаемых значений:
const double squareRoot(double d);
Это не имеет никакого смысла.squareRoot возвращает const double, но так как он передается «по значению» и, следовательно, должен быть скопирован в мою собственную локальную переменную, я могу делать с ней все что захочу.
С другой стороны:
const Customer *getCustomer(char *name);
Сообщает мне, что getCustomer возвращает мне указатель на клиента, и мне не разрешено изменять содержимое клиента.
На самом деле было бы лучше сделать указатель на символ-содержимое const также, так как я не ожидаю, что функция изменит данную строку:
const Customer *getCustomer(const char *name);