Ответ 1
Существуют две общие причины для таких неконстантных эталонных параметров:
-
Вам может потребоваться несколько параметров "out" в функции, и с помощью эталонного параметра (s) это разрешено.
-
Ваш объект может быть дорогим для копирования, и поэтому вы передаете ссылку, которая будет мутирована, а не возвращать объект, который может быть скопирован как часть процесса возврата. Объекты с дорогостоящей копией могут включать стандартные контейнеры (например,
vector
) и объекты, которые управляют памятью кучи, где будет выполняться последовательность распределения-освобождения-освобождения. Обратите внимание, что компиляторы действительно хорошо оптимизируют эти копии, когда это возможно, и поэтому эта причина имеет меньше импорта, чем она использовалась.
EDIT: я должен пояснить, что даже в С++ конкретный пример, который вы предоставили с одним параметром Reference, является довольно нетипичным. В таких случаях возвращаемое значение почти всегда предпочтительнее.