Подтвердить что ты не робот

Передача строк С++ по значению или по ссылке

Мне интересно, считается ли строка С++ достаточно малой, чтобы быть более эффективной при передаче по значению, чем по ссылке.

4b9b3361

Ответ 1

Нет. Передайте его по ссылке:

void foo(const std::string& pString);

Как правило, передавайте ссылки по статьям, если они имеют нетривиальный конструктор-копию, иначе по-значение.

Строка обычно состоит из указателя на данные и счетчика длины. Он может содержать более или менее, поскольку он определен как реализация, но вряд ли ваша реализация использует только один указатель.

В коде шаблона вы также можете использовать const T&, так как определение функции будет доступно компилятору. Это означает, что он может решить, должно ли оно быть ссылкой или нет для вас. (Я думаю)

Ответ 2

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