Функция имеет дело с копией переданного аргумента.Если это целое число, вы можете опустить const
, так как оригинал не будет затронут в любом случае.В случае указателя на тип int есть три варианта:
int* p
const int* p
(или int const* p
) const int* const p
(или int const* const p
)
const
может применяться к указанному объекту, самому указателю или к обоим.В качестве аргумента вы передаете указатель, поэтому вы можете опустить const
для него, так как его копия передается в функцию.Таким образом, (2) и (3) могут использоваться взаимозаменяемо (только при использовании в качестве типа аргумента функции!).Но const
для типа заостренного объекта имеет значение:
void foo(const int* p);
// функция не может изменить указанный целочисленный объект через p void foo(int* p);
// функция может изменить указанный целочисленный объектчерез p
В обоих случаях функция может изменять p
внутри функции, но эти изменения не отражаются на исходном значении указателя.