Оператор return и возвращение результата

Последнее обновление: 04.03.2023

Для возвращения результата из функции применяется оператор return. Этот оператор имеет две формы:

return выражение;
return;

Первая форма оператора return применяется для возвращения результата из функции. Если функция имеет в качестве возвращаемого типа любой тип, отличный от void, то такая функция обязятельно должна возвратить некоторое значение с помощью оператора return. Причем возвращаемое значение должно соответствовать возвращаемому типу функции, либо допускать неявное преобразование в этот тип.

Единственная функция, которая возвращает некоторое значение, и где можно не использовать оператор return - это функция main.

Например, мы хотим написать программу, которая бы вычисляла сумму чисел. Определим функцию, которая возвращает сумму чисел:

#include <iostream>

int sum(int, int);

int main()
{
    int result = sum(10, 6);    // 16
    std::cout << result << std::endl;

	std::cout << sum(10, 7) << std::endl;   // 17
    std::cout << sum(10, 8) << std::endl;   // 18
}

int sum(int n, int m)
{
    int res = n + m;
    return res;
}

Здесь функция sum, которая вычисляет сумму чисел, принимает два значения типа int и возвращает значение типа int, поэтому прототип функции выглядит следующим образом

int sum(int, int);

И в этом случае в функции sum необходимо использовать оператор return, после которого идет возвращаемое значение:

int res = n + m;
return res;

В данном случае возвращается значение переменной res. Хотя это могло бы быть сложное выражение, которое возвращало число int, например:

int sum(int n, int m)
{
    return n + m;
}

Так как функция sum возвращает значение, то ее результат можно присвоить какой-нибудь переменной или константе:

int result = sum(10, 6);    // 16
std::cout << result << std::endl;

Либо напрямую использовать результат функции sum, как число, например, при выводе на консоль:

std::cout << sum(10, 7) << std::endl;   // 17

Рассмотрим еще один пример:

#include <iostream>

int calculate(int, int, char);

int main()
{
    std::cout << calculate(10, 6, '+') << std::endl;   // 16
    std::cout << calculate(10, 6, '-') << std::endl;   // 4
    std::cout << calculate(10, 6, '*') << std::endl;   // 60
    std::cout << calculate(10, 6, '/') << std::endl;   // 0
}

int calculate(int n, int m, char op)
{
    switch(op)
    {
        case '+': 
            return n + m;
        case '-':
            return n - m;
        case '*':
            return n * m;
        default: 
            return 0;
    }
}

Здесь определена функция calculate, которая также принимает два числа и символ - знак операции. В конструкции switch в зависимости от знака операции с помощью оператора return возвращается результат определенной операции

return без возвращения значения

Другая форма оператора return не принимает после себя никаких значений и может использоваться в тех функциях, которые не возвращают никакого значения, то есть имеют в качестве возвращаемого типа void. Эта форма может быть полезна, если нам надо выйти из функции до ее завершения.

Например, функция принимает имя и возраст пользователя и выводит их на консоль:

#include <iostream>
#include <string>

void print(std::string, unsigned);

int main()
{
    print("Tom", 38);       // Name: Tom       Age: 38
    print("Bob", 2500);     // Incorrect age
}

void print(std::string name, unsigned age)
{
    // если запредельный возраст
    if(age > 120)
    {
        std::cout << "Incorrect age" << std::endl;
        return; // выходим из функции
    }

    std::cout << "Name: " << name << "\tAge: " << age << std::endl;
}

Здесь в функции print проверяем переданный возраст. И если он представляет недопустимое значение, то с помощью оператора return осуществляем выход из функции.

Выведение типа результата

Компилятор С++ может автоматически выводить тип возвращаемого значения, если вместо возвращаемого типу используется оператор auto:

#include <iostream>

// автоматически выводится возвращаемый тип
auto sum(int a, int b)
{
    return a + b;
}

int main()
{
    std::cout << sum(3, 6) << std::endl; // 9
}

Здесь тип результата в функции sum выводится автоматически. Поскольку возвращется сумма a + b, результат которой будет представлять тип int, соответственно компилятор выведет, что функция возвращает тип int. Стоит отметить, что функция sum определена до того, как она вызывается в функции main.

В данном случае нет большого смысла использовать оператор auto вместо int. Обычно auto применяется, если название возвращаемого типа довольно большое и сложное, что позволит сократить код.

Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850