乙個函式返回兩值的通用實現方法。。
解決辦法,要麼定義結構體,然後返回結構體,要麼就用指標傳引數。
在主函式裡,定義乙個結構體型別的變數,然後直接用函式返回值賦值就可以了。
typedef struct dint;
dint foo()
int main()
yutaooo()的建議:
// 1.
// 這種方案是可行的,但我覺得不太好。
// 通過傳引用,然後在foo中修改,再傳出給呼叫方。
// 我覺得不好主要是覺得不自然,感覺上返回,就應該從乙個地方出去嘛。
class a;
class b;
void foo(a & a, b & b);
// 2.用結構是可行的,但往往我們不需要這個結構的,所以結構有點生硬。
// 3.我覺得用std::pair比較合適。如:
class a;
class b;
std::pairfoo();
// 4.多個返回直(2個以上)可以考慮boost::tuple
// 5.多返回直問題在效率上值得考慮下,不過這個很羅嗦,什麼返回直優化啦,右直引用啦(c++0x中會引入),需要具體問題具體分析的。
研討這類問題,需要做些假設:
1、假設你是打算用c++程式設計而不是用「c風格的c++」程式設計。
2、盡可能使用標準的東西。
3、盡可能簡單,可靠,可能的話優雅。
好,在這些假設之下,我們就可以很明確地決定用法了。
由於有了假設1和假設3,那麼在fun()中分配記憶體的方法不合適。這使fun()的使用複雜化,而且容易出錯。因為你在呼叫完必須記得釋放記憶體。如果fun()是給別人用的,那麼這就更麻煩了。
使用結構是不錯的想法,但得看你怎麼用。絕對不能返回fun()的區域性物件,那是自然的。在fun()裡new上面也否定了。那麼要麼通過引數以引用方式傳遞,要麼return 這個結構的例項。
如果希望使用起來優雅些、簡潔些,那麼return比較好。但是需要注意的是,此時只能return值,不能return引用:
retstruct fun()
因為rt_是區域性變數,離開fun就不存在了。
如果考慮到假設2,那麼建議你採用yutaooo()的建議,用標準的std::pair<>,以及「準標準」的boost::tuple<>。
最後,return值會降低效率。真的嗎?如果你使用的是10年前的編譯器,或許會。但現在標準已要求編譯器對此進行優化,而多數編譯企業遵循了這個要求。所以,放心地用吧。關於這個問題,meyes曾在《more effective c++》中有詳細地闡述。
乙個函式中返回多個值
如把多個需要返回的值作相應的處理後變成乙個可以用return 語句返回的資料,再在主調函式中拆開返回的資料使之變成幾個值。那麼當我們希望從乙個函式中返回多個值時,用什麼方法去實現比較合理呢?2方法1 利用全域性變數 分析 全域性變數作為c 語言的乙個知識點,雖然我們都了解它的特點,但在實際教學過程中...
乙個函式返回多個值 C
1 2public void getvalues string userid,string password,outstring string username,outbool flag 313 else 1417 18 19private void btnlogin click object se...
C 乙個方法返回多個值
示例 1 static void main string args 2 value value 1.00 13 console.writeline out string value stroutvalue out string value out function 1415 16 呼叫函式 17 函...