Передача по значению / эталону и константность - это две разные концепции. Но используется вместе.
Передача по значению
void DoSomething (SomeData data);
Передача по значению используется, когда копирование обходится дешевле и не требуется хранить ссылки на посторонние объекты. Эта функция может (если она находится внутри класса) в некоторых случаях сохранять указатель на нее и иметь собственную копию.
Передача по ссылке
void DoSomething (SomeData& data);
Всегда используйте передачу по ссылке, если знаете, что это может привести к снижению производительности при копировании структуры. Эта функция может (если она находится внутри класса) в некоторых случаях сохранять указатель на это и указывать на сторонний объект. Сохранение указателей на посторонние объекты означает, что вы должны знать о времени его жизни и о том, когда этот посторонний объект выходит за пределы. Что более важно, изменения в чужом объекте появляются в вашем указателе.
постоянная корректность
void DoSomething (const SomeData data); // const for local copy
void DoSomething (const SomeData& data); // const for callers object
Добавление const
для передачи по значению или ссылке означает, что эта функция не меняет его. Но отсутствие или наличие &
решает, к какому объекту вы пытаетесь добавить безопасность изменения. const
- очень полезный инструмент в C ++ с точки зрения API документирования, обеспечивает безопасность времени компиляции, позволяет оптимизировать компиляцию.
Читать эту статью.