Вы должны использовать const
в подписи всякий раз, когда вам не нужно писать. Добавление const
к подписи имеет два эффекта: он сообщает компилятору, что вы хотите, чтобы он проверял, и гарантировал, что вы не измените этот аргумент внутри своей функции. Второй эффект заключается в том, что внешний код может использовать вашу функцию, передавая объекты, которые сами являются постоянными (и временными), что позволяет чаще использовать одну и ту же функцию.
В то же время ключевое слово const
является важной частью документации вашей функции / метода: сигнатура функции явно говорит о том, что вы собираетесь делать с аргументом, и о том, безопасно ли передавать объект это часть инвариантов другого объекта в вашей функции: вы явно указываете, что не будете связываться с их объектом.
Использование const
налагает более строгий набор требований в вашем коде (функция): вы не можете изменять объект, но в то же время он менее ограничивает ваших вызывающих, делая ваш код более пригодным для повторного использования.
void printr( int & i ) { std::cout << i << std::endl; }
void printcr( const int & i ) { std::cout << i << std::endl; }
int main() {
int x = 10;
const int y = 15;
printr( x );
//printr( y ); // passing y as non-const reference discards qualifiers
//printr( 5 ); // cannot bind a non-const reference to a temporary
printcr( x ); printcr( y ); printcr( 5 ); // all valid
}