gpt4 book ai didi

C++ 函数模板需要 & 作为数组参数

转载 作者:行者123 更新时间:2023-12-01 14:37:23 24 4
gpt4 key购买 nike

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

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;
}

最佳答案

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

void processArray(T elements[SIZE])

确实

void processArray(T* elements)

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

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

关于C++ 函数模板需要 & 作为数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62415894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com