2014-11-08 83 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; 
} 

在大多數情況下,第二溶液是是首選。