乙個函式返回兩值的通用實現方法(簡單,備忘)

2021-04-12 22:02:14 字數 1291 閱讀 7560

乙個函式返回兩值的通用實現方法。。

解決辦法,要麼定義結構體,然後返回結構體,要麼就用指標傳引數。

在主函式裡,定義乙個結構體型別的變數,然後直接用函式返回值賦值就可以了。

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 函...