редактировать
Как отметил М., от параметров в прототипахconst
игнорируются. Отредактированный источник исходного ответа (см. Ниже) показывает это:
float correct(float const value);
float erroneous(float const value);
float changer(float value);
float correct(float value) {
return -value;
}
float erroneous(float value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
Там нет сообщения об ошибке.
В любом случае, я оставлю оригинал на месте в надежде, что он поможет.
оригинал
Параметр const
at делает этот параметр доступным только для чтения внутри функции.
Например:
float correct(float const value) {
return -value;
}
float erroneous(float const value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
Этот источник не будет компилироваться без сообщения об ошибке.
Функция correct()
прочитает данное значение, изменит его знак и вернет отрицательное значение.
erroneous()
Кажется, что функция делает то же самое, за исключением того, что этому параметру присваивается значение. Но в качестве параметра const
это не допускается.
Далее функция changer()
будет работать как раньше, но не дает ошибок.
Давайте посмотрим на сайт вызова:
float f = 3.14159;
float g = correct(f); // or erroneous(f) or changer(f)
Переменная, f
заданная в качестве аргумента, будет скопирована в параметр value
. Он никогда не изменится, даже если changer()
будет вызван.
Вы можете посмотреть на параметры как на какие-то локальные переменные. На самом деле они в основном обрабатываются так в сгенерированном машинном коде.
Итак, почему ты видишь const
иногда? Вы видите это, если указатель определен как параметр.
Если вы не хотите, чтобы значение, на которое указывает указатель, было изменено, вам нужно добавить const
; но делай это в правильном положении!
void effective(int const * pointer);
void futile(int * const pointer);
void possible_but_overly_restricted(int const * const pointer);
const
здесь избыточно, что, по-вашему, происходит?