Ну, это не для звонящего, а для кода внутри someFunc1
.Так что любой код внутри someFunc1
не изменит его случайно.как
void someFunc1(int *arg) {
int i = 9;
arg = &i; // here is the issue
int j = *arg;
}
Давайте рассмотрим конкретный пример:
1) Просто сделаем указанное значение постоянным
void someFunc1(const int * arg) {
int i = 9;
*arg = i; // <- compiler error as pointed value is const
}
2) Просто сделаем указатель постоянным
void someFunc1(int * const arg) {
int i = 9;
arg = &i; // <- compiler error as pointer is const
}
3) Правильный способ использования const, если задействованные переменные могут быть const:
void someFunc1(const int * const arg) {
int i = 9;
*arg = i; // <- compiler error as pointed value is const
arg = &i; // <- compiler error as pointer is const
}
Это должно очистить все сомнения.Итак, я уже упоминал, что он предназначен для кода функции, а не для вызывающей стороны, и вы должны использовать самый ограничительный из трех случаев, которые я упомянул выше.
РЕДАКТИРОВАТЬ:
- Даже вобъявления функций это хорошая практика объявлять
const
.Это не только повысит удобочитаемость, но и вызывающий абонент будет осведомлен о контракте и будет более уверен в неизменности аргументов.(Это необходимо, потому что вы обычно делитесь своими заголовочными файлами, чтобы у вызывающей стороны не было вашего файла реализации c / cpp) - Даже компилятор может указать лучше, если и объявление, и определения синхронизированы.