2011-04-03 83 views
3

功能模板例如參數在C++模板

template<typename T, int n> 
T max(T (&arr)[n]) 
{ 
    T maxm = arr[0]; 
    for(int i = 1; i <n; ++i) 
     if (maxm < arr[i]) 
     maxm = arr[i]; 

    return maxm; 
} 

改編也喜歡牛逼類型參數?

回答

1

arr也是類型參數,如T

arr是一個調用參數。它既不是類型參數也不是非類型參數

5

arr是函數參數的名稱。這不是一個類型參數。其類型是對元素類型爲T和長度爲n的數組的引用。

1

arr是一個通常的函數參數,它在函數調用時傳遞一個變量。

然而,這樣的說法的類型用於確定Tn,其模板參數。所以在某種程度上,arr用於將函數參數鏈接到模板參數。

這個過程被稱爲類型扣除

0

arr是功能參數,該類型從Tn推導出來。

考慮更改代碼:

template<typename T, int n> 
T max(T (&arr)[n]) 
{ 
    T* maxel = &(arr[0]); 
    for(int i = 1; i <n; ++i) 
     if (*maxel < arr[i]) 
     maxel = &(arr[i]); 

    return *maxel; 
} 

在你的版本,如果你給了那些更大的某些對象數組作爲指數每上升一次拷貝構造函數將被稱爲 - 這可能是昂貴莫名其妙,具體取決於T類型。