返回a,b做什么以及为什么?

时间:2016-08-14 15:52:10

标签: c++ return

当我们使用"返回4,5"在c ++中,它不会给出错误,而是返回5(至少4个是可以理解的,因为它应该返回它遇到的第一个数字)。为什么会发生这种情况,我们可以用它来以任何方式返回2个值吗?

这是我试过的代码

#include<iostream>
using namespace std;
int something()
{
    return 4,5;
}
int main()
{
    int a=0,b=0;
    a,b = something();
    cout<<a<<b<<endl;
}

也在上面的代码中出于某种原因将5分配给b而不是

3 个答案:

答案 0 :(得分:3)

这就是逗号运算符的工作原理 - 它计算所有操作数并返回最后一个操作数。

不幸的是,C ++没有内置的tuple(如intdouble等)类型,因此,不可能从函数中返回多个值。但是,您可以使用包装器类型std::tuple,然后使用std::tie函数将其解压缩:

#include <iostream>
#include <tuple>

std::tuple<int, int> something()
{
    return {1, 2};
}

int main()
{
    int a=0, b=0;
    std::tie(a, b) = something();

    std::cout << a << b << std::endl;
}

但这对两个变量来说有点开销。

答案 1 :(得分:2)

它使用内置的逗号运算符(因为它们不是用户定义的类型)。对于用户定义的类型,它将调用operator,()(逗号运算符)。

逗号运算符计算运算符的两边并返回后者的结果。这就是为什么你得到5而不是4的结果。

至于为什么在这里完成我不能说 - 看起来很傻。

答案 2 :(得分:1)

如果要返回两个值,请返回std::vector。也许是std::pair或类。至于为什么,这就是C ++的工作原理。逗号只是一个运算符,如+或 - 。它丢弃其左操作数并返回正确的操作数。 return从函数返回其表达式的值。其余的你可以弄清楚自己。