Программирование. Принципы и практика использования C++ Исправленное издание, стр. 113
int my_find(vector<string> vs, string s, int) // 3-й аргумент // не используется{ for (int i = 0; i<vs.size(); ++i) if (vs[i]==s) return i; return –1;}Полная грамматика объявлений функций изложена в книге Язык программирования С++ Страуструпа и в стандарте ISO C++.
8.5.2. Возврат значения
Функция возвращает вычисленное значение с помощью инструкции
returnT f() // функция f() возвращает объект класса T{ V v; // ... return v;}T x = f();Здесь возвращаемое значение — это именно то значение, которые мы получили бы при инициализации переменной типа
TVV v;// ...T t(v); // инициализируем переменную t значением vТаким образом, возвращаемое значение — это форма инициализации. Функция, объявившая возвращение значения, должна его возвращать. Например, в следующем фрагменте возникает ошибка:
double my_abs(int x) // предупреждение: этот код содержит ошибки{ if (x < 0) return –x; else if (x > 0) return x;} // ошибка: если х равно нулю, функция ничего не возвращаетНа самом деле компилятор может не заметить, что вы “забыли” про вариант
x=0returnerror()По историческим причинам функция
main()main()return 0В функции, не возвращающей никаких значений, инструкцию
returnvoid print_until_s(vector<string> v, string quit){ for(int i=0; i<v.size(); ++i) { if (v[i]==quit) return; cout << v[i] << '\n'; }}Как видим, достичь последней точки функции, перед именем которой стоит ключевое слово
voidreturn;8.5.3. Передача параметров по значению
f()// передача по значению (функция получает копию передаваемого// значения)int f(int x){ x = x+1; // присваиваем локальной переменной x новое значение return x;}int main(){ int xx = 0; cout << f(xx) << endl; // вывод: 1 cout << xx << endl; // вывод: 0; функция f() не изменяет xx int yy = 7; cout << f(yy) << endl; // вывод: 8 cout << yy << endl; // вывод: 7; функция f() не изменяет yy}Поскольку в функцию передается копия, инструкция
x=x+1f()xxyy
Передача по значению представляет собой довольно простой механизм, а ее стоимость определяется стоимостью копирования значения.
8.5.4. Передача параметров по константной ссылке
Передача по значению проста, понятна и эффективна, если передаются небольшие значения, например переменные типа
intdoubleToken