Как вернуть через функцию два значения в C++?

284
12 декабря 2017, 19:44

Суть : Допустим у нас есть функция, в результате выполнения действий внутри нее мы получаем значения переменных, которые нам необходимо вернуть. Как это сделать? И как при вызове присвоить эти значения двум переменным одновременно?

Answer 1

Варианты:

  1. вернуть структуру или кортеж (пару) с двумя полями
  2. использовать передачу параметров по ссылке или через указатель.

Например, считать сумму и разность двух переменных:

std::pair<int,int> sumdif(ina a, int b)
{
    return pair<int,int>(a+b,a-b);
}
void sumdif(int a, int b, int& sum, int& dif)
{
    sum = a+b;
    dif = a-b;
}
...
int a = 5, b = 7;
auto p = sumdif(a,b);
cout << "Sum = " << p.first << ", Dif = " << p.second << endl;

или

int a = 5, b = 7, s, d;
sumdif(a,b,s,d);
cout << "Sum = " << s << ", Dif = " << d << endl;
Answer 2

Дополню ответ @Harry

Если под рукой компилятор с поддержкой 11 ого (и выше) стандарта, то можно воспользоваться std::tuple и вернуть его из функции, эдакое обобщение на std::pair для произвольноно числа элементов с разными типами

std::tuple<int, int> f()
{
    std::tuple<int, int> t = { -1, 123 };
    //  ...
    return t;
}
std::tuple<int, const bool, unsigned> g()
{
    std::tuple<int, const bool, unsigned> t = { -1, false, 123 };
    //  ...
    return t;
}
READ ALSO
Не работает код, возврат функции, C++

Не работает код, возврат функции, C++

При компиляции открывается консоль, которая выводит два отрицательных восьмизначных числаЧто не так?

236
Проблема с очередью на с++ [требует правки]

Проблема с очередью на с++ [требует правки]

Пишу очередь с приоритетамиВозникла проблема

192