C ++ const ключевое слово - использовать свободно? - PullRequest
23 голосов
/ 12 октября 2009

В следующих функциях C ++:

void MyFunction(int age, House &purchased_house)
{
    ...
}


void MyFunction(const int age, House &purchased_house)
{
    ...
}

Что лучше?

В обоих случаях «возраст» передается по значению. Мне интересно, нужно ли ключевое слово «const»: оно мне кажется избыточным, но также полезным (в качестве дополнительного указания переменная не изменится).

Кто-нибудь имеет какое-либо мнение относительно того, что (если таковое имеется) из вышеперечисленных лучше?

Ответы [ 12 ]

4 голосов
/ 12 октября 2009

Одно из преимуществ использования const заключается в том, что вы не можете случайно изменить значение age в середине MyFunction (если вы забыли, что оно не было передано по ссылке). Один «недостаток» заключается в том, что вы не можете перерабатывать age с кодом, подобным foo.process(++age);.

1 голос
/ 12 октября 2009

Наличие примитивного типа, который передается по значению const, практически бесполезно. Передача const в функцию, как правило, полезна в качестве контракта с вызывающей стороной, что функция не будет изменять значение. В этом случае, поскольку int передается по значению, функция не может вносить изменения, которые будут видны за пределами функции.

С другой стороны, ссылки и нетривиальные типы объектов всегда должны использовать const, если в объект не будут внесены какие-либо изменения. В теории это может позволить некоторую оптимизацию, но большой выигрыш - контракт, который я упомянул выше. Недостатком является, конечно, то, что он может сделать ваш интерфейс намного больше и сделать его сложным для внедрения в существующую систему (или с помощью стороннего API, не использующего const везде).

...