我想知道如何在下面的代码片段中编译器从T (&arr)[arrsize]
函数参数中推导出arrsize
模板参数。例如,当我将一个4元素的数组传递给它时,我没有提到函数中的数字4,它正确地确定了arrsize
参数为4.但是,如果我正常传递数组(不作为参考)数组),也就是说,如果我将T (&arr)[arrsize]
更改为T arr[arrsize]
,则需要我在模板参数列表中明确提供arrsize
参数。定义为模板参数时,编译器如何推导出数组大小?
template <class T, int arrsize> void bubblesort(T (&arr)[arrsize], int order=1)
{
if (order==0) return;
bool ascending = (order>0);
int i,j;
for (i=arrsize; i>0; i--)
for (j=0; j<i-1; j++)
if (ascending?(arr[j]>arr[j+1]):(arr[j]<arr[j+1])) swap(arr[j],arr[j+1]);
}
所以我的问题是:
编译器如何弄不清
arrsize
参数值开机时自动传递给函数的数组的引用? (什么是机制?)为什么编译器不能做同样的事情,如果我正常传递数组? (由通常我的意思是不使用参考符号)
'型ARR [arrsize]'来自C: -/ – Jarod42