Является ли разница во времени выполнения (между функцией с передачей по ссылке и передачей по значению) значимой в C ++?
Это может быть значительным и незначительным. Это зависит.
Я реализовал решение передачи по значению, и мое время выполнения для тестового набора было выше 120 мс, для того же тестового примера в проходе по ссылке время выполнения резко сократилось до примерно 8 мс
Результат этого эксперимента наглядно демонстрирует случай, когда разница во времени кажется существенной - хотя без информации о дисперсии измерений мы не можем быть уверены, что результаты статистически значимы.
Почему разница настолько значительна?
Вы можете узнать с помощью профилировщика. Учитывая, что изменение аргумента на ссылку, по-видимому, значительно улучшает скорость, разумно предположить, что большую часть времени тратится на создание нескольких копий аргумента.
Это происходит? только для строк
Это не только для строк. Вы обнаружите, что есть и другие типы, которые также медленно копируют.
Я имею в виду, примитивные / встроенные типы данных ведут себя одинаково?
Возможно, нет.
Сколько времени занимает копирование целого числа? Целые числа обычно составляют 1-8 байт. Требуется примерно одна инструкция.
Сколько времени занимает копирование строки? Насколько большой даже строка? Даже sizeof(std::string)
- это больше, чем самый большой целочисленный тип в вашей системе. Затем есть массив Dynami c, который может быть размером в гигабайты. Копирование гигабайта занимает больше времени, чем копирование 8 байтов. Даже если строка не настолько массивна, ее копия может включать динамическое распределение c. Динамическое выделение c намного медленнее, чем простое копирование целого числа.
Будет ли проход по указателю приводить к тому же выполнению, что и передача по ссылке?
Вы можете узнать путем измерения. Но я могу сказать вам, что да.