Оператор return и возвращение результата
Для возвращения результата из функции применяется оператор return. Этот оператор имеет две формы:
1
2
return;
return выражение;
Первая форма используется, если в качестве возвращаемого типа функции применяется тип void. Например:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
void factorial(int);
int main()
{
factorial(-3);
factorial(5);
factorial(4);
return 0;
}
void factorial(int n)
{
if(n<1)
{
std::cout << "Incorrect number" << std::endl;
return;
}
int result = 1;
for(int i = 1; i <=n; i++)
{
result *= i;
}
std::cout << "Factorial of " << n << " is equal to " << result << std::endl;
}
В данном случае функция factorial вычисляет факториал переданного числа. Однако если число меньше 1, то функция выводит соответствующее сообщение, и с помощью оператора return осуществляется выход из функции.
Вторая форма оператора return применяется для возвращения результата из функции. Если функция имеет в качестве возвращаемого типа любой тип, отличный от void, то такая функция обязятельно должна возвратить некоторое значение с помощью оператора return. Причем значение, которое возвращается оператором return, должно соответствовать возвращаемому типу функции, либо допускать неявное преобразование в этот тип.
Например, возвратим из функции факториал числа:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
int factorial(int);
int main()
{
int n = 5;
int result = factorial(n);
std::cout << "Factorial of " << n << " is equal to " << result << std::endl;
return 0;
}
int factorial(int n)
{
int result = 1;
for(int i = 1; i <=n; i++)
{
result *= i;
}
return result;
}
Так как функция factorial возвращает значение, то ее результат можно присвоить какой-нибудь переменной или константе:
1
int result = factorial(n);
Возвращение ссылки
Не следует возвращать ссылку на локальный объект, который создается внутри функции. Поскольку все создаваемые в функции объекты удаляются после ее завершения, а их память очищается, то возвращаемая ссыла будет указывать на несуществующий объект, как в следующем случае:
1
2
3
4
5
6
7
8
9
int &factorial(int n)
{
int result = 1;
for(int i = 1; i <=n; i++)
{
result *= i;
}
return result;
}