Дело в том, что вы не допускаете изменения значения в теле функции.Аргумент функции - это просто автоматическая переменная в теле функции, и вы можете убедиться, что она остается на своем входном значении.Рассмотрим
int foo(int x)
{
/* lots of code */
some_other_func(x); // may modify x
/* even more code */
return x+42; // x may have been modified
}
и
int foo(const int x)
{
/* lots of code */
some_other_func(x); // will not compile if x is taken by non-const reference
/* even more code */
return x+42; // x is guaranteed at its input value
}
Как правило, объявляйте все const
, что не должно быть изменено.Затем, если вы или кто-то случайно попытаетесь изменить такую переменную, возникнет ошибка времени компиляции.
Обратите также внимание, что декларатор const
не действует в объявлении функции, но только в определении функции, то есть следующее прекрасно (на самом деле рекомендуется):
struct bar
{
int foo(int) const;
/* more code */
};
int bar::foo(const int x) const // possibly in another compilation unit
{
...
}