可能重複:
can a function return more than one value?C++函數可以返回多個值嗎?
我想從C++函數返回3個變量而是作爲一個功能都只能有一個正在運行的返回值,我怎麼能返回3個值。嘗試使用return(5,4);但這是一個語法錯誤。
可能重複:
can a function return more than one value?C++函數可以返回多個值嗎?
我想從C++函數返回3個變量而是作爲一個功能都只能有一個正在運行的返回值,我怎麼能返回3個值。嘗試使用return(5,4);但這是一個語法錯誤。
您只能在C++中返回一個值。如果您需要返回更多信息,請返回一個結構(或例如一個容器,例如std::vector
),或者將某些變量作爲非常量引用(或指針)傳入並更改它們。
你不能。然而,你可以做技巧來僞造它。例如,讓你的函數返回一個指向int的指針,並將指針返回給一個int數組。
沒有,但有兩種方法可以做到這一點:
1)給出的指針的值,以「迴歸」爲參數,您更改功能的它的價值。
2)您可以創建一個包含所有這些值的struct
並返回該結構。但是,只有在確實需要時才使用它,但第一種解決方案要好得多。
C++函數只能返回一個值。但是,您可以通過將它們包裝到類或結構中來返回多個值。
struct Foo
{
int value1;
int value2;
};
Foo SomeFunction()
{
Foo result = { 5, 4 };
return result;
}
或者你可以使用std::tuple
,如果可用你的編譯器。
#include <tuple>
std::tuple<int, int, int> SomeFunction()
{
return std::make_tuple(5, 4, 3);
}
如果你事先不知道你有多少價值回報,一個std::vector
或類似容器是你最好的選擇。
你也可以通過指向你的函數的指針或引用參數並在函數中修改它們來返回多個值,但我認爲返回一個複合類型通常是一種「更乾淨」的方法。
+1爲std ::元組。 :) – Macke
同上:) – SteeveDroz
如果你想從一個函數接受多個值,一個方便的方法是使用'std :: tie' http://stackoverflow.com/a/2573822/502144 – user502144
或者您可以使用std::pair
獲得兩個結果,並查看兩個以上的boost::tuple
。它甚至可以在同一個元組中處理不同的類型。
你也可以用'pair
嘗試使用return(5,4);但這是一個語法錯誤。
這不是一個語法錯誤。 (5,4)
是一個有效的表達式,這裏的,
是一個運算符。因此,表達式(5,4)
的計算結果爲最右邊的操作數,即4
。因此它將返回4
。
現在來到你的問題:定義一個struct
任何現有一個不幫你,並返回結構的對象,而不是,如:
struct values
{
int i;
int j;
char *other;
};
values f()
{
values v = {/*....*/};
//...
return v;
}
如果型的所有值是一樣的,那麼你可以使用std::vector
爲:
#include <vector> //must include it!
std::vector<int> f()
{
std::vector<int> v;
v.push_back(5);
v.push_back(4);
//so on
//...
return v;
}
ŧ這裏還有其他容器,也就是說, std::map
,std::list
,std::stack
等。最適合你的用途。顧名思義,還有std::pair
只有兩個值。
有幾種方法可以實現這一點。
如果你有相同類型的對象,std::array
將是一個很好的返回類型。
如果您有不同的號碼,請改爲使用std::vector
。
如果你有(固定數量的)不同類型,使用std::tuple
:
std::tuple <int, long, double> f()
{
return std::tuple <int, long, double>(42, 4711l, 3.141);
}
我知道沒有辦法返回不同數量的內置於不同類型的非多態對象語言或標準庫。
return std :: make_tuple –
@Martin:在這種情況下工作。但是,如果我寫了'4711'而不是'4711l'呢? – sbi
然後你得到一個編譯時錯誤。這是一件好事。 –
return (a, b, c, ... , n)
的陳述a
,b
,c
用逗號分隔的運營商和所述表達式的計算結果到最右邊的操作數n
。所以語法是正確的,但不會返回多個值。
返回多個值:
這裏大部分的答案是正確的,你應該返回一個結構。 如果您有興趣,還有一種方法,那就是通過發送您想要返回的變量的引用。
例如:
#include<iostream>
#include<cstdio>
using namespace std;
bool f(int a,int b,int& q,int& r)
{
if(b==0)return 0;
q=a/b;
r=a%b;
return 1;
}
int main()
{
int a=64,b=7,q,r;
bool pos=f(a,b,q,r);
if(pos)
{
printf("Quotient = %d Remainder = %d\n",q,r);
}
else
{
printf("Divison by zero not possible!\n");
}
return 0;
}
它可以從你必須使用指針,這種情況下,一個函數返回多個值。也可以通過使用指針參數指針參數保持它們的值' 用於返回多個值的指針的詳細用法在http://www.techyv.com/questions/how-do-i-return-multiple-variables-c-function
返回一個結構。
struct a
{
int x;
int y;
int z;
};
b()
{
a.x = 2;
a.y = 4;
a.z = 8;
return a;
}
另請參見問題http:// stackoverflow。com/q/1468375/141081 – Dirk