Например:
void func(const int i);
Здесь const
не требуется, поскольку все параметры передаются по значению (включая указатели).
Это правда?
Все параметры в C действительно передаются по значению, а это означает, что фактический аргумент не изменится независимо от того, включаете ли вы эту const
или нет.
Однако это не означает, что const
здесь «никогда не требуется». Независимо от того, нужно ли это или нет, зависит от того, чего вы хотите достичь.
Если вы хотите предотвратить любые попытки изменить параметр внутри функции, необходимо, конечно, константа.
Существует довольно популярное (и довольно разумное) руководство по кодированию, в котором говорится, что функциональные параметры никогда не должны изменяться внутри функции, т. Е. Что в любой момент выполнения функции все параметры должны сохранять свои исходные значения. В соответствии с этим руководством на самом деле имеет смысл всегда включать этот const
во все объявления параметров.
const используется только прекомпилером, чтобы заметить об ошибках …
Обратите внимание, что это совершенно верно:
void foo( const char * bar ) { char * baz = ( char * )bar; baz++; }
Поэтому он никогда не нужен, но он просто делает код более удобочитаемым и сообщает, что указатель никогда не должен меняться …