2014-11-08 24 views
0

我必须编写一个代码,它具有一个函数,它带有两个整数,并返回x(a + b)和y(a * b),当我运行它时,它仅输出y。为什么不输出(或返回)x?从1函数返回并输出2个整数

#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; 
} 

回答

1

线

return x, y; 

不会做你期望的。 comma operator仅返回最后一个逗号后面的值 - 在本例中为y。要返回多个值,应该使用struct或包含两者的类。

3

返回类型mathint,所以这就是它返回的结果(单个整数)。

表达式x, y使用comma operator。逗号运算符评估x,放弃其值,然后评估并返回y。换句话说,return x, y相当于return y

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

+0

你可能还会提到['std :: tie()'](http://en.cppreference.com/w/cpp/utility/tuple/tie) – 2014-11-09 00:19:44

+0

@BillLynch'std :: tie'如何帮助这里? – 2014-11-09 00:38:42

+0

你不是真的想暗示他使用'std :: pair',对吧?你真的认为'first'和'second'是这些字段的合适名称吗? (实际上,如果需要维护代码,使用'std :: pair'几乎不是一个好的解决方案。) – 2014-11-09 00:40:13

0

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

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; 
} 
+1

为什么不是std :: pair? – 2014-11-09 00:06:30

0

有两种方法可以使函数返回多个值。所述 第一种是使用了参数,无论是引用或指针:

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; 
} 

在大多数情况下,第二溶液是是首选。