c 函式如何接受數量不定的函式引數

時間 2021-05-31 16:24:36

1樓:星空CCL

cppblog.com/woaidongmao/archive/2015/06/19/149036.html這個大佬的部落格講挺清楚:)

2樓:

常用的兩種辦法:

std::va_list - cppreference.com

Parameter pack - cppreference.com

3樓:王可c

你說的是 「含有可變形參的函式」吧

用initializer_list型別的形參就可以了。

initializer_list類定義在同名頭檔案裡面哈。

int text(initializer_list il)我也是最近開始接觸C++,一起加油哈。

4樓:李帥源

C++11 有兩種處理不同數量實參的函式

如果所有的實參型別相同,可以傳遞乙個名為initializer_list的標準型別

如果實參的型別不同,可以採用一種特殊函式,所謂的可變引數模板

5樓:FENICE

老的C寫法,用stdarg.h裡的va_start, va_end, va_arg巨集,

C++11新寫法(當然已經不算新了),用變長引數模板,template

再補充乙個,可以用std::initializer_list做引數

6樓:

知識點:Parameter pack - cppreference.com

template

typename

...Targs

>void

tprintf

(const

char

*format,T

value

,Targs

...Fargs

)// recursive variadic functionstd::

cout

<<*format;}}

7樓:VizXu

是這個 void foo(...){}這裡只是你說的傳入不定量的引數,至於你說的還要根據引數情況做不同的操作,那麼可以用函式過載。比方foo(int a,...

); foo(int a,char c,...);之類。你把所有可能需要操作的函式引數型別都過載,到時你用的時候就可以直接使用了。

8樓:西六貓犯二

va_arg

這是printf的implementation用到的,典型的variable length arg function

9樓:clover

如果是用Qt的話,可以這樣寫:

#include

#include

#include

void

func

(QVector

>vec)

}int

main

()C++ 17 的 any真心無語。Read and write different types in vector 。

其他就只有C++可變引數模版和C語言的了。

10樓:Xi Yang

如果你需要的是像printf那樣的玩意,那麼你應當使用varg那套東西,大致的套路如下:

在函式的引數列表的最後,以...作為最後乙個引數,例如int my_func(int a, float b, int c, ...)

在函式實現裡,用va_start、va_arg、va_end這些東西來獲取那些不定的引數。

詳見stdarg.h的文件。

這種可變引數的函式,是在編譯時由編譯器在函式呼叫處決定壓棧引數的個數,而函式實現在執行時經由某個引數獲取引數的個數。比如printf,引數的個數隱含在格式模板裡。

如果你可以接受每個引數長度都產生乙個單獨的函式例項,那就參照另乙個答案。

C 11的std function作為函式引數時應該以哪種方式傳參?是否要視情況而定?

菊花三弄 如果你是想把function 放容器裡,用常量引用,插入容器的時候拷貝一次。如果你想把function 放到其他執行緒執行,用傳值 歐文韜 第二部分是std function的實現原理所以你就看你的場景能不能接受function的複製代價,不能的話就const reference,最省事 ...

C語言 如何在函式體內,自動判斷傳入的陣列引數的長度。

飛著走的魚 裸陣列 內建 不可以判斷,陣列長度需要傳遞進去。這算是C語言本身的一種風格 要獲得可以判斷長度的陣列,需要自己設計陣列型別,用struct定義,並使用動態分配記憶體。 孔乙己 main函式的一般形式是 main int argc,char argv argc就是後邊那個argv陣列的個數...

c語言中,形參就是變數嗎?為什麼說函式的形參可以是指標型別?

C語言答疑課堂 別說形參了,實參也是變數,傳遞給函式的引數都是變數。指標也是一種變數,跟int變數,char變數一樣,都是變數。既然都是變數,函式大爺全然接受。 形參就是函式的引數 什麼是引數?比如你在dos下敲個命令dir如果目錄太多的話一螢幕顯示不完。那麼敲 dir p就可以分屏顯示,這個 p就...