Есть ли какой-либо случай, когда передача по const & не оптимальна для строк?
В тех случаях, когда у вызывающей стороны нет объекта std::string
, во-первых, создаетсяодин для передачи ссылки не является оптимальным. Аргумент std::string_view
охватывает эти случаи, а также большинство случаев, когда ссылка на строку является оптимальной.
, что может быть в таком случае, когда передача строки по значению (const) лучше, чем передача по const &, если она есть?
Текстто, что вы цитируете, описывает такой случай:
... Особенно, если вы часто читаете из него в функции.
Чтобы объяснить почему : копирование в аргумент происходит только один раз за вызов функции, в то время как косвенное обращение через ссылку (или представление строки) происходит при каждом доступе в функции. Учитывая, что ни одна из них не является бесплатной, должно быть некоторое количество косвенных указаний, которые стоят дороже, чем копия.
Вопрос о том, достигнуто ли когда-либо это число в вашей программе, - другой вопрос. Число сильно зависит от возможностей системы и длины входной строки. Если вы измеряете, что передача по значению статистически быстрее (с разумным p-значением) в вашей программе в целевой системе, то это может стоить того. Но это довольно редкий случай, поэтому ссылка (или строковое представление) рекомендуется выбирать по умолчанию, если только функция не нуждается в копировании.
Обратите внимание, что передача значения const часто не являетсяхорошая идея, поскольку она заставляет функцию снова копировать строку в тех случаях, когда она могла бы ее переместить.