Передача C++ представляет в виде строки значением или ссылкой

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

21
задан Anonymous 11 December 2009 в 04:29
поделиться

2 ответа

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

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

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

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

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

32
ответ дан 29 November 2019 в 21:06
поделиться

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

2
ответ дан 29 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: