C 函式如何返回多值?

時間 2021-05-06 19:19:23

1樓:額額額

用結構體可以

另外那個遞迴寫法寫階乘 ,其實可以這樣寫#include

typedef struct a

int h;

aa;aa jc(int n)

aa xx;

if(n==1)

xx.h=1;

return xx;

xx.h=n* jc(n-1).h;

return xx;

int main()

printf("%d",jc(5).h);

這樣子感覺要清晰一點呀啊oror

2樓:

optional> bar1()

int main()

{ auto tp2 = bar1();

if(tp2bool t1 = std::get<0>(*tp2string t2 = std::get<1>(*tp2string t3 = std::

get<2>(*tp2cout<<"t1:"<

boost::optional(std::optional c++17) + tuple

既可以返回多值,同時直接還可以用返回值判斷是否合法(初始化)

3樓:

1. 使用Tuple

2. 自己定義乙個結構體來返回

3. structured binding4. 使用引數返回:

形如:HRESULT createInstance(IUnknown** out1, IUnknown** out2);

HRESULT表示是否返回成功,out1、out2表示返回的指標

4樓:

tuple是個方法了,不過如果是老一些的庫維護的話,一般用這種方法

bool getResult(struct outputDat& data){}

5樓:朱涵俊

2個返回值可以用結構。

struct ret

64位系統支援2個long。

直接返回這個結構,會利用2個暫存器進行返回。

6樓:hearts zh

有人提到了structured binding。確實好用。

struct

result

;result

foo();}

auto[a

,b]=

foo();if(

a)std::

tuple

,std

::string

,std

::string

>bar();}

auto[x

,y,z

]=bar();if(

x)感覺structured binding還不完善,比起go之類的還是難用一點。原proposer還加了很多功能,但17中都被刪掉了,只有這幾種簡單情況。c++20應該會改善更多一些。

7樓:機犬

只是 C99/C++ 用的話返回結構體就行了,但因為機器碼層面只能返回乙個機器字,所以編譯後大於機器字大小的結構是隱式傳乙個指標進去得到返回值,所以如果要公開 ABI 給其他語言用,最好直接傳個指標進去。

8樓:coca

可以考慮Windows Api中非常常用的一種設計,就是函式返回值用來指示函式是否執行成功,而函式引數中提供乙個結構體指標,這樣呼叫返回後,通過返回值檢視是否成功,如果成功,那麼獲取結構體中的值,比如:

BOOL WINAPI GetWindowInfo(_In_ HWND hwnd,_Inout_ PWINDOWINFO pwi);這個函式中,如果執行成功,可以通過pwi輸出引數獲取各種結果。

9樓:Morris

用cpp不都講究個oo麼,應該比較常見常用的是返回類物件或者結構體物件指標之類的。

也可以用out引數的辦法,看你的需要了。

10樓:諸葛不亮

我習慣傳引用輸入,作為返回值。然後函式本身的返回則用來標識執行狀態。

不過也可以玩多值返回,用std::tuple。

如果使用的框架支援variant,比如c++17、boost、Qt,那麼返回儲存variant的容器也行。

如果是單返回值,又要有執行結果,那可以返回值作為函式返回,執行結果不正常時拋異常。其實這才是最標準的方式。

如果返回的東西資料結構比較複雜,那就得考慮定義乙個物件或者結構體了

C 的函式返回值是如何構造的?

你如果是想問為什麼少輸出乙個new的話,那是因為F在隱式建立返回值物件的過程中,呼叫的是複製建構函式A const A 而不是預設的無參建構函式A 所以你自定義的無參建構函式A 並沒有捕獲到這次構造。include using namespace std struct A A A const A o...

C 要如何解決函式功能大致相同只有返回值不同的問題

Minghao Hu namespace TrashBin private static Union string GetUnion boolid return 1 public struct Union T2 private Union T1 v1 private Union T2 v2 publ...

C 函式返回常引用給常引用初始化的問題,大家可不可以幫幫我?

黃亮anthony std string get std string t return t 就能滿足這裡的要求。謹慎所有返回引用函式 記憶體塊生命週期 不說人話 字串字面值隱式構造了string物件,get的引數引用了該string物件。但是該物件產生於get函式執行週期內,且由該週期內的棧持有,...