函数可以返回多个值吗?

时间:2010-04-03 16:20:15

标签: c++ language-agnostic return-value

  

可能重复:
  Returning multiple values from a C++ function

函数可以返回多个值吗?

修改
除了通过引用返回。

7 个答案:

答案 0 :(得分:21)

boost::tuple库中,a function called tie简化了从返回的tuple中获取信息的过程。如果您的函数返回了tuple两个double并希望将它们加载到两个局部变量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;
}

答案 1 :(得分:15)

是 - 让你的函数返回一个结构。或者通过参考参数返回值。

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

答案 2 :(得分:12)

不,但您可以返回包含多个值的pairboost::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指出的那样,从技术上讲,这不是返回多个变量,但它是一个很好的替代品。

答案 3 :(得分:1)

函数可以以指定的方式返回值:

  • 通过任何类型的返回值
  • 通过指针
  • 通过参考
  • 通过设置全局变量(强烈不推荐)

如果需要自包含返回值,通常会在结构中包装所需的类型,并按值返回该结构的对象。如果要避免保留本地副本,则应传入要修改的引用参数。

答案 4 :(得分:1)

#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);
}

答案 5 :(得分:0)

使用结构并返回具有不同数据类型的多个值。

答案 6 :(得分:-4)

main()
{
  int a=10,b=20;
  int *c;
  c=aa(a,b);
  printf("%d %d",*c,*c+1);
}

void aa(int a,int b)
{
   int c1[2];
   c1[0]=b+a;
   c1[1]=a-b;
   return(c1);
}

这里,将返回c1的地址。所以它将存储在主要的c cariable。我们可以通过指针

来检索两个变量