Определении функции в C++

Для чего нужен амперсанд в определении функции? А также const в самом названии функции, в аргументах все понятно что для чего, но конкретно с названием функции не до конца понимаю.

const string & version2(string & s1, const string & s2) 
{ 
    s1 = s2 + s1 + s2;
    return s1;
} 

Ответы (2 шт):

Автор решения: gbg
  1. Возвращать ссылку.
  2. Возвращать константную ссылку.

Зачем надо - например, это позволяет не делать лишних копирований, а также гарантирует, что получивший такую ссылку не сможет в нее что-то записать.

→ Ссылка
Автор решения: Harry
const string & version2(string & s1, const string & s2) 
^^^^^^^^^^^^^^  - Возвращаемый тип
               ^^^^^^^^ - имя функции
                        ^^^^^^^^     ^^^^^^^^^^^^^^ - типы аргументов

Это функция version2, которая принимает ссылку на строку s1, ссылку на константную строку s2 (т.е. обещает не менять s2 по ходу работы), а возвращает - ссылку на константную строку, т.е. получив которую, вы не можете ее менять.

→ Ссылка