いいえ。ただし、複数の値を含めることができるpair
またはboost::Tuple
を返すことができます。
さらに、参照を使用して、次のように複数の値を返すことができます。
void MyFunction(int a, int b, int& sum, int& difference);
この関数は次のように呼び出します。
int result_sum;
int result_difference;
MyFunction(1, 2, result_sum, result_difference);
Hoganが指摘しているように、技術的にはこれはreturning複数の変数ではありませんが、適切な代替手段です。
_boost::Tuple
_ライブラリには、 tie
と呼ばれる関数があり、返されたTuple
から情報を取得するプロセスを簡素化します。 2つのTuple
のdouble
を返す関数があり、それらを2つのローカル変数x
とy
にロードしたい場合は、関数を割り当てることができます。 boost::tie(x, y)
に値を返します。
例:
_#include <math.h>
#include <iostream>
#include <boost/Tuple/tuple.hpp>
const double PI = 3.14159265;
boost::Tuple<double, double> polar_to_rectangular(double radius, double angle)
{
return boost::make_Tuple(radius * cos(angle), radius * sin(angle));
}
int main()
{
double x;
double y;
boost::tie(x, y) = polar_to_rectangular(4, (45 * PI) / 180);
std::cout << "x == " << x << ", y == " << y << std::endl;
return 0;
}
_
はい-関数に構造体を返させます。または、参照パラメータを介して値を返します。
struct A {
int x, y;
A(int x, int y) : x(x), y(y) {}
};
A myfun() {
return A(0, 42); // return two values
}
または:
void myfun(int & a, int & b) {
a = 0;
b = 42;
}
関数は、指定された方法で値を返すことができます。
自己完結型の戻り値が必要な場合は、通常、必要な型を構造体でラップし、その構造体のオブジェクトを値で返します。ローカルコピーを保持したくない場合は、変更する参照パラメーターを渡します。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
int a;
int b;
}Mystruct;
Mystruct myfun();
int main()
{
char name[30];
Mystruct ms2;
ms2 = myfun();
printf("val1: %d val2: %d",ms2.a,ms2.b);
return 0;
}
Mystruct myfun()
{
int a,b;
Mystruct ms;
a = 10;
b = 20;
ms.a=a;
ms.b=b;
return(ms);
}
構造体を使用し、異なるデータ型で複数の値を返します。