2017-02-15 263 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'数组的引用,它是完全有效的。 –