Передавать сложные типы данных (векторы, строки, любые контейнеры, большие структуры) в функции через константную ссылку нужно по нескольким причинам:
- Избежать ненужного копирования. 1 При передаче по значению создание копии объекта может быть очень дорогим процессом. 1 Например, копирование вектора приведёт к копированию всех его элементов. 1 Передача по ссылке позволяет избежать этих затрат, так как создаётся ссылка на фактический аргумент и копирование значений не происходит. 2
- Гарантировать, что аргумент не изменится. 25 Константная ссылка не позволяет изменять переменную, на которую она ссылается. 2 Если использовать её в качестве параметра, то вызывающий может быть уверен, что функция не изменит аргумент. 2
- Помочь с отладкой. 2 Использование константных ссылок сообщает программисту, что функция не изменит значение аргумента, и это может помочь с отладкой. 2
Передача объекта в функцию по константной ссылке является нормой, если только не предполагается изменять объект внутри функции. 3