Я задаюсь вопросом, считают ли строку C++ достаточно маленькой, чтобы быть более эффективной при передаче значением, чем ссылкой.
№ Передайте его по ссылке:
void foo(const std::string& pString);
В общем, передавайте объекты по ссылке, если они имеют нетривиальный конструктор копирования, в противном случае - по значению.
Строка обычно состоит из указателя на данные и счетчика длины. Он может содержать больше или меньше, поскольку его реализация определена, но маловероятно, что ваша реализация использует только один указатель.
В коде шаблона вы также можете использовать const T &
, поскольку определение функции будет доступен компилятору. Это означает, что он может решить, должен ли он быть справочным или нет. (Я думаю)
Определенно нет. Если ваша конкретная реализация не имеет семантики копирования при записи (что в наши дни редко из-за проблем с потоками), вся строка должна копироваться при передаче по значению (даже если фактические строковые данные хранятся в куче). Даже если сам строковый объект представляет собой всего лишь пару указателей внутри, объем копируемых данных линейно зависит от длины строки.