我有一個函數查找最大值,我想通過引用發送靜態數組,爲什麼不可能這樣?通過引用傳遞模板函數
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;
}
我有一個函數查找最大值,我想通過引用發送靜態數組,爲什麼不可能這樣?通過引用傳遞模板函數
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;
}
使用正確的語法。更改簽名:
template <class T, size_t size>
T findMax(const T (&arr)[size]){...}
或者你可以使用std::array
論據findMax()
功能。
爲什麼不是這可能嗎?
const T &arr
:這裏arr
是T
型的參考,而不是參考T
像你想象的類型的數組。所以你需要在arr
之後[..]
。但是,它會衰減到一個指針。 在這裏您可以更改與()
的綁定並使用const T (&arr)[SIZE]
。
欲瞭解更多,您可以嘗試探索const T &arr[N]
v/s const T (&arr)[N]
之間的差異。
你能詳細說明你做了什麼?,這個語法是什麼標準?它會在任何類型的數組上工作嗎? – Lea
我希望編輯後這個更清晰。我希望它能幫助你。 –
'T&arr [N]'是一個引用數組[非法](http://stackoverflow.com/questions/5460562/why-it-is-impossible-to-create-an-array-of-references -in-c),但是'T(&arr)[N]'是對'T'數組的引用,它是完全有效的。 –
請使用'int main()'(注意'int'和'()') –
僅供解釋,我同意int(我會編輯它,謝謝)。 – Lea