通过引用传递模板函数
我有一个函数查找最大值,我想通过引用发送静态数组,为什么不可能这样?通过引用传递模板函数
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