Top*_*ort 2 c++ templates c++20
在此 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;
}
Run Code Online (Sandbox Code Playgroud)
这是因为数组衰减。除非您通过引用传递数组,否则它将衰减为指针。这意味着
void processArray(T elements[SIZE])
Run Code Online (Sandbox Code Playgroud)
是真的
void processArray(T* elements)
Run Code Online (Sandbox Code Playgroud)
并且无法获取SIZE模板的内容,因为指针不知道它指向的数组的大小。
一旦将数组参数设为引用,就可以停止这种衰减,并可以从传递给函数的数组中获取大小。
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |