2017-02-15 261 views
7

我有一個函數查找最大值,我想通過引用發送靜態數組,爲什麼不可能這樣?通過引用傳遞模板函數

template <class T> 
T findMax(const T &arr, int size){...} 

int main{ 
    int arr[] = {1,2,3,4,5}; 
    findMax(arr, 5); // I cannot send it this way, why? 
    return 0; 
} 
+2

請使用'int main()'(注意'int'和'()') –

+1

僅供解釋,我同意int(我會編輯它,謝謝)。 – Lea

回答

7

使用正確的語法。更改簽名:

template <class T, size_t size> 
T findMax(const T (&arr)[size]){...} 

或者你可以使用std::array論據findMax()功能。

Live Example

爲什麼不是這可能嗎?

const T &arr:這裏arrT型的參考,而不是參考T像你想象的類型的數組。所以你需要在arr之後[..]。但是,它會衰減到一個指針。 在這裏您可以更改與()的綁定並使用const T (&arr)[SIZE]

欲瞭解更多,您可以嘗試探索const T &arr[N] v/s const T (&arr)[N]之間的差異。

+1

你能詳細說明你做了什麼?,這個語法是什麼標準?它會在任何類型的數組上工作嗎? – Lea

+0

我希望編輯後這個更清晰。我希望它能幫助你。 –

+0

'T&arr [N]'是一個引用數組[非法](http://stackoverflow.com/questions/5460562/why-it-is-impossible-to-create-an-array-of-references -in-c),但是'T(&arr)[N]'是對'T'數組的引用,它是完全有效的。 –