C++函数模板需要 &for 数组参数

C++ function template requires & for array parameter

本文关键字:for 数组 参数 函数模板 C++      更新时间:2023-10-16

在此 MCVE 中,编译器抱怨processArray无法匹配参数列表 (arr(。解决方法是将T elements[SIZE]替换为T (&elements)[SIZE]。为什么我需要这样做,在什么情况下?我通常不会使用&将数组传递到函数中。(我想到它的唯一原因是这就是 C++20 新版本的istream& operator>>描述其字符数组参数的方式。

template <typename T, int SIZE>
void processArray(T elements[SIZE])
{
for (int i = 0; i < SIZE; ++i)
elements[i] = 2;
}
int main()
{
int arr[3];
processArray(arr);
return 0;
}

这是因为数组衰减。 除非你通过引用传递数组,否则它将衰减为指针。 这意味着

void processArray(T elements[SIZE])

真的是

void processArray(T* elements)

并且无法获取模板的SIZE,因为指针不知道它指向的数组的大小。

一旦使数组参数成为引用,就可以停止这种衰减,并且可以从传递给函数的数组中获取大小。