Из того, что я понимаю: когда вы проходите по значению, функция создает локальную копию переданного аргумента и использует это; когда функция заканчивается, она выходит за рамки. Когда вы передаете ссылку const, функция использует ссылку на переданный аргумент, который не может быть изменен. Однако я не понимаю, почему один выбирал один за другим, за исключением ситуации, когда аргумент должен быть изменен и возвращен. Если у вас была функция void, в которой ничего не возвращается, зачем выбирать один за другим?
РЕДАКТИРОВАТЬ: Таким образом, в основном передача константой const позволяет избежать копирования объекта. Так в каких ситуациях копировать объект хорошо? Я имею в виду, почему бы не просто использовать константные ссылки все время, если он постоянно оптимизирует производительность?