当我们使用"返回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而不是
答案 0 :(得分:3)
这就是逗号运算符的工作原理 - 它计算所有操作数并返回最后一个操作数。
不幸的是,C ++没有内置的tuple
(如int
,double
等)类型,因此,不可能从函数中返回多个值。但是,您可以使用包装器类型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
从函数返回其表达式的值。其余的你可以弄清楚自己。