从1函数返回并输出2个整数

Returning and outputting 2 integers from 1 function

本文关键字:输出 2个 整数 返回 函数      更新时间:2023-10-16

我必须写一个代码,它有一个函数,它接受两个整数,并将x作为(a+b)返回,将y作为(a*b)返回。当我运行它时,它只输出y。为什么它不输出(或返回)x?

#include <iostream>
using namespace std;
int math (int a, int b) {
    int x, y;
    x = a + b;
    y = a * b;
    return x, y;
}
int main() {
    cout << math (5,3);
    getchar();
    getchar();
    return 0;
}

math的返回类型是int,所以这就是它返回的值(单个整数)。

表达式x, y使用逗号运算符。逗号运算符计算x,丢弃其值,然后计算并返回y。换句话说,return x, y等同于return y

您可以使用std::pair<int,int>来返回一对整数。

return x, y;

没有达到你的期望。逗号运算符只返回最后一个逗号之后的值——在本例中为y。要返回多个值,应该使用struct或同时包含这两个值的类。

您只能返回一件事。你可以把它们放在一个结构中,然后返回它。更简单的例子。

struct xy {
    int x;
    int y;
};
xy math(int a, int b) {
    xy pair;
    int x, y;
    pair.x = a + b;
    pair.y = a * b;    
    return pair;
}

有两种方法可以使函数返回多个值。这个首先是使用参数,无论是引用还是指针:

void
math( int a, int b, int& sum, int& product )
{
    sum = a + b;
    product = a * b;
}
int
main()
{
    int s;
    int p;
    math(5, 3, s, p);
    std::cout << s << ' ' << p << std::endl;
    return 0;
}

另一种是定义一个包含两个值的类:

struct MathResults
{
    int sum;
    int product;
};
MathResults
math( int a, int b )
{
    return MathResults{ a + b, a * b };
}
std::ostream&
operator<<( std::ostream& dest, MathResults const& value )
{
    dest << value.sum << ' ' << value.product;
}
int
main()
{
    std::cout << math( 5, 3 ) << std::endl;
    return 0;
}

在大多数情况下,第二种解决方案是优选的。