C ++函数可以返回多个值吗?

时间:2011-06-18 08:12:55

标签: c++

  

可能重复:
  can a function return more than one value?

我想从c ++函数返回3个变量但是因为一个函数只能有一个运行的返回值,所以我可以返回3个值。尝试使用return(5,4);但这是语法错误。

11 个答案:

答案 0 :(得分:29)

C ++函数只能返回一个值。但是,您可以通过将它们包装在类或结构中来返回多个值。

struct Foo
{
     int value1;
     int value2;
};

Foo SomeFunction()
{
    Foo result = { 5, 4 };
    return result;
}

或者您可以使用std::tuple,如果您的编译器可以使用它。

#include <tuple>

std::tuple<int, int, int> SomeFunction()
{
    return std::make_tuple(5, 4, 3);
}

如果您事先并不知道要返回多少个值,那么std::vector或类似的容器是您最好的选择。

你也可以通过在函数中使用指针或引用参数并在函数中修改它们来返回多个值,但我认为返回复合类型通常是一种“更清洁”的方法。

答案 1 :(得分:6)

您只能在C ++中返回一个值。如果需要返回更多信息,请返回一个结构(或者像std::vector这样的容器),或者将一些变量作为非const引用(或指针)传递并更改它们。

答案 2 :(得分:6)

  

尝试使用return(5,4);但这是语法错误。

这不是语法错误。 (5,4)是一个有效的表达式,此处,是一个运算符。因此表达式(5,4)计算到最右边的操作数,即4。因此它将返回4


现在解决您的问题:定义struct如果任何现有的对您没有帮助,请返回 struct 的对象,如下所示:

struct values
{
   int i;
   int j;
   char *other;
};

values f()
{
  values v = {/*....*/};
   //...
   return v;
}

如果所有值的类型相同,那么您可以将std::vector用作:

#include <vector>  //must include it!

std::vector<int> f()
{
   std::vector<int> v;
   v.push_back(5);
   v.push_back(4);
   //so on
   //...
   return v;
}

还有其他容器,即。 std::mapstd::liststd::stack等。最适合您的用途。还有std::pair,它只包含两个值,顾名思义。

答案 3 :(得分:4)

或者您可以使用std::pair获得两个结果,并查看boost::tuple两个以上的结果。它甚至可以处理同一元组中的不同类型。

答案 4 :(得分:4)

有几种方法可以实现这一目标。

  1. 如果您有相同类型的对象,std::array将是一个很好的返回类型。
     如果您的号码不同,请改用std::vector

  2. 如果您有(固定数量)不同类型,请使用std::tuple

    std::tuple <int, long, double> f()
    {
      return std::tuple <int, long, double>( 42, 4711l, 3.141 );
    }
    
  3. 我知道无法返回语言或标准库中内置的不同类型的不同类型的非多态对象。

答案 5 :(得分:1)

不,但有两种方法可以做到:

1)将指向值的指针作为参数“返回”,在函数中更改它的值。

2)您可以创建一个包含所有这些值的struct并返回结构。只有在真的有必要时才使用它,但是,第一种解决方案要好得多。

答案 6 :(得分:0)

你做不到。但是,你可以做一些技巧来伪造它。例如,让你的函数返回一个指向int的指针,并将指针返回一个int数组。

答案 7 :(得分:0)

return (a, b, c, ... , n)语句abc用逗号运算符分隔,表达式求值为最右边的操作数n。所以语法是正确的,但不会返回多个值。

要返回多个值:

  • 将要返回的变量放入结构中并返回。
  • 或者创建一个包含多个变量的数组(动态分配)并返回基址

答案 8 :(得分:0)

这里的大多数答案都是正确的,你应该返回一个结构。 如果您感兴趣,还有一种方法,那就是发送您想要返回的变量的引用。

例如:

#include<iostream>
#include<cstdio>
using namespace std;
bool f(int a,int b,int& q,int& r)
{
    if(b==0)return 0;
    q=a/b;
    r=a%b;
    return 1;
}

int main()
{
    int a=64,b=7,q,r;
    bool pos=f(a,b,q,r);
    if(pos)
    {
        printf("Quotient = %d Remainder = %d\n",q,r);
    }
    else
    {
        printf("Divison by zero not possible!\n");
    }
    return 0;
}

答案 9 :(得分:0)

可以从函数中返回多个值,以便为该情况使用指针。这也可以通过使用指针参数指针参数保持其值“  用于返回多个值的指针的详细用法是http://www.techyv.com/questions/how-do-i-return-multiple-variables-c-function

答案 10 :(得分:0)

返回一个结构。

struct a
{
   int x;
   int y;
   int z;
};

b()
{
    a.x = 2;
    a.y = 4;
    a.z = 8;
    return a;
}