C++函数模板需要 &for 数组参数
C++ function template requires & for array parameter
在此 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
,因为指针不知道它指向的数组的大小。
一旦使数组参数成为引用,就可以停止这种衰减,并且可以从传递给函数的数组中获取大小。
相关文章:
- 使用for循环检查数组中的重复项
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 为什么我的 scanf() 没有在我的数组上迭代我的 for 循环?
- 在定义字符数组(井字游戏)的 for 循环中应用输入限制
- C++函数模板需要 &for 数组参数
- 使用基于数组和范围的 For 循环替换一些基本代码行
- 在C++中使用 for 循环的数组迭代
- For 循环在尝试读取数组 c++ 时程序崩溃
- 在 for 循环中定义的临时数组,并分配给属于指针数组的指针
- C++:带有 "auto" 的二维数组上的嵌套 For 循环
- 如何使用基于范围的for循环迭代Rapidjson文档(它本身就是一个JSON数组)
- C++ 中用于二维数组的 for-each 循环
- 比较嵌套 for 循环中的两个 wchar 数组?
- 如何在 for 循环中声明多个名称相似的数组?
- 在 C++98/03 中以相反的顺序将 C 数组附加到向量,而无需 for 循环
- 使用分而治之的最大总和子数组,为什么要以不同的方式使用 for 循环,答案是错误的?
- 如何使用 for 循环来比较不同大小的数组
- 如何在 for 循环中声明和使用结构数组?
- 使用 for 循环打印字符串数组无法正常工作 (C++)