Некоторые виды использования сопзЬ на самом деле не имеет особого смысла.
Предположим, у вас есть следующие функции:
void myFunction (const int value);
Конст говорит компилятору, что значение не должно измениться внутри функции. Эта информация не имеет значения для вызывающего абонента.Это зависит от самой функции, чтобы решить, что делать со значением. Для абонентов, следующие два определения функции ведут себя точно так же для него:
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 получает указатель, который передается по значению, и который является константой. Поскольку MyFunction получает копию значения указателя, для вызывающего не имеет значения, является ли оно const или нет. Самое главное, что myFunction может изменять содержимое значения, потому что указательная переменная сама является константой, но содержимое в ней не является.
То же самое верно и для возвращаемых значений:
const double squareRoot(double d);
Это не имеет никакого смысла. squareRoot возвращает double, но поскольку это передается по значению, и поэтому его нужно скопировать в мою локальную переменную, я могу делать все, что захочу.
С другой стороны:
const Customer *getCustomer(char *name);
Сообщает мне, что GetCustomer возвращает меня указатель на клиента, и я не разрешается изменять содержимое клиента.
На самом деле, было бы лучше, чтобы сделать символьные-указатель-содержимое сопзЬ, а также, так как я не ожидаю, функция изменить данную строку:
const Customer *getCustomer(const char *name);
понял, что константный funcs членов не имеет ничего общего с модифицирующими параметрами, но об изменении переменного класса. – Jor