web-dev-qa-db-ja.com

関数は複数の値を返すことができますか?

重複の可能性:
C++関数から複数の値を返す

関数は複数の値を返すことができますか?

編集
参照による返品を除く。

13
Ashish Yadav

いいえ。ただし、複数の値を含めることができる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複数の変数ではありませんが、適切な代替手段です。

12
rlbond

_boost::Tuple_ライブラリには、 tie と呼ばれる関数があり、返されたTupleから情報を取得するプロセスを簡素化します。 2つのTupledoubleを返す関数があり、それらを2つのローカル変数xyにロードしたい場合は、関数を割り当てることができます。 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;
}
_
22
Josh Townzen

はい-関数に構造体を返させます。または、参照パラメータを介して値を返します。

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;
}
15
anon

関数は、指定された方法で値を返すことができます。

  • 任意のタイプの戻り値を介して
  • ポインタ経由
  • 参照経由
  • グローバル変数を設定する(強くお勧めしません)

自己完結型の戻り値が必要な場合は、通常、必要な型を構造体でラップし、その構造体のオブジェクトを値で返します。ローカルコピーを保持したくない場合は、変更する参照パラメーターを渡します。

1
Brian R. Bondy
#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);
}
1
Saurabh

構造体を使用し、異なるデータ型で複数の値を返します。

0
Saurabh