2010-07-16 134 views
3

通過引用獲取可變數量的參數意味着什麼?這是否意味着每個參數都通過引用傳遞?C++ 0x將參數傳遞給variadic模板函數

考慮例如以下功能,其在其每個參數執行一些處理:

void f() // base case for recursion 
{ 
} 


template <typename Head, typename ... Tail> 
void f(Head& head, Tail&... tail) 
{ 
    // Do processing on head 
    process(head); 

    // Now recurse on rest of arguments 
    f(tail...); 
} 

現在,如果我有:

int a, b, c; 
... 
f(a, b, c); 

將這個結果f中的實例化(INT &,INT (int &,int &),f(int &,int &),最後f(int &)?

如果我把f()的第二個參數改爲「Tail ...」而不是「Tail & ...」,那麼怎麼辦?現在的實例是f(int &,int,int),f(int &,int),最後是f(int &),這意味着例如'c'將被複制通過前兩個調用,最後一次調用將修改副本而不是原始的?

有人可以指出一個很好的參考,解釋如何準確可變模板工作?

回答

2

我覺得你的直覺是正確的,你可以閱讀從目前的draft ISO spec所有的細節(它尚未完成),你可以測試他們與GCC> 4.3