Вы никогда не можете изменить тип данных любой переменной. Если у вас есть const int
, это всегда то же самое, что и int const
. Хотя для объявлений функций существуют особые случаи.
На самом деле,
int add(const int a, const int b);
и
int add(int a, int b);
Или любая комбинация const
в ней объявляет одну и ту же функцию. Снаружи они все одинаковы, и на самом деле имеют одинаковый тип. Это имеет значение только для определения функций. Если не поставить const
int add(int a, int b) { a++; /* possible, increment the parameter */ }
Вы можете изменить параметры (которые в этом примере являются копиями переданных аргументов). Но если вы введете const, параметры будут постоянными в определении функции
int add(int const a, int const b) {
a++; // bug, a is a constant integer!
}
Почему не имеет значения, пишете ли вы const или нет для объявлений функций? Потому что аргумент будет скопирован, и в любом случае он не окажет никакого влияния на аргументы вызывающего и вызывающего! По этой причине рекомендуется следующий стиль. В заголовке объявите функции без констант
int add(int a, int b);
Затем, в определении, если вы хотите, чтобы параметр был const, вставьте const в.
#include "add.hpp"
// remember, const int and int const is the same. we could have written
// int add(const int a, const int b); too
int add(int const a, int const b) { return a + b; }
То же самое для функций-членов
struct foo {
void f(int);
};
void foo::f(int const a) { ... }
Обратите внимание, что мы говорили только о const, который напрямую влияет на константу параметра. Существуют и другие константы, которые влияют на константность при использовании ссылок или указателей. Эти константы не , которые следует игнорировать, и они действительно важны.