C C 可變引數函式

2021-10-03 19:35:07 字數 1501 閱讀 8223

標頭檔案:#include

函式宣告

int

add(

int count,..

.);

函式定義

int

add(

int count,..

.)

函式呼叫

int

main()

邊長引數模板相當於乙個模板的遞迴展開模型,但是它不是遞迴的。使用的時候,要定義乙個「遞迴」的出口,然後定義一系列的操作,操作的是以「遞迴」的方式進行的。

遞迴函式方式展開,模板推導的時候,一層層遞迴展開,最後到沒有引數時用定義的一般函式終止。

void

test()

template

<

classt,

class..

. args>

void

test

(t first, args.

.. args)

test<

int,

int,

long

>(1

,2,3l

);//輸出

int1

int2

long

3test

()

嗯?第乙個test()應該是作為test函式遞迴呼叫的結尾。再測試一下

template

<

class

t>

void

test

(const t &t)

template

<

classt,

class..

. args>

void

test

(t first, args.

.. args)

//輸出

int1

int2

test()

3

這。。。。好像是通過第乙個test來控制在**結束。

最後寫乙個正經的累加器:

#include

#include

using

namespace std;

template

<

typename t>

intadd

(const t& t)

template

<

typename t,

typename..

.args>

intadd

(const t& t,

const args&..

. args)

intmain()

//輸出結果 8

關於可變引數類模板、右值引用和完美**的內容可以參考這篇部落格有時間再研究下後面怎麼做。

C C 可變引數函式

可變引數的函式,即函式的引數個數和引數型別不完全確定的函式。這類函式最常見的就是printf scanf函式。在c c 中,為了通知編譯器函式有可變引數,必須以三個點結束該函式的宣告。例如 printf函式的宣告 int printf const char format,scanf函式宣告 int ...

可變引數的c c 函式

最近在寫遊戲的時候看到書上寫了個virtual void displaytext int id,long x,long y,unsigned long color,char text,0 當我看到這個函式時,我和小夥伴們都驚呆啦,我的娘,這是神馬函式,還帶省略號的,難道是書上寫錯了?然後我抱著試試看...

C C 可變引數

函式 使用va list巨集組解決變參問題 1 首先定義va list型的變數,這個變數是指向引數的指標。2 然後用va start巨集初始化剛定義的va list變數,這個巨集的第二個引數是 第乙個可變引數的前乙個引數 3 再用va arg得到可變引數,第二個引數是 可變引數 的型別。4 最後用v...