我可以在C ++中同时分配2个变量吗?

时间:2012-01-12 10:31:11

标签: c++

int DFS(a, b,c,d)
{
    first=a+b;
    second=c+d;
    return(first,second);
}

solution, cost_limit = DFS(a, b,c,d);
我可以做这样的事吗?如何?

5 个答案:

答案 0 :(得分:17)

在C ++ 11中,您可以使用元组类型和tie

#include <tuple>

std::tuple<int, int> DFS (int a, int b, int c, int d)
{
    return std::make_tuple(a + b, c + d);
}

...

int solution, cost_limit;
std::tie(solution, cost_limit) = DFS(a, b, c, d);

答案 1 :(得分:3)

你可以这两种方式:

  1. 创建一个包含两个值的结构并将其返回:

    struct result
    {
        int first;
        int second;
    };
    
    struct result DFS(a, b, c, d)
    {            
        // code
    }
    
  2. 有参数:

    void DFS(a, b, c, d, int& first, int& second)
    {
        // assigning first and second will be visible outside
    }
    

    致电:

    DFS(a, b, c, d, first, second);
    

答案 2 :(得分:2)

使用C ++ 17,您可以打开一对或元组的包装

auto[i, j] = pair<int, int>{1, 2};
cout << i << j << endl; //prints 12
auto[l, m, n] = tuple<int, int, int>{1, 2, 3};
cout << l << m << n << endl; //prints 123

答案 3 :(得分:1)

如果无法使用C ++ 11,则可以使用引用。

通过在参数中传递对变量的引用。

int DFS(int a, int b, int c, int d, int &cost_limit)
{
    cost_limit = c + d;
    return a + b;
}

int solution, cost_limit;

solution = DFS(a, b, c, d, cost_limit);

答案 4 :(得分:0)

你应该知道的一件事是,如果a,b,c,d不是基类型,而是你定义的类的实例,让我们说Foo,并且你重载了类的=运算符,你必须确保事实上,运算符将返回对已分配对象的引用,否则您将无法链接赋值(solution = cost_limit = DFS(..)将仅分配给cost_limit)。 =运算符应如下所示:

Foo& Foo::operator =(const Foo& other)
    {
       //do stuff
       return other;
    }