【发布时间】:2016-06-21 19:03:37
【问题描述】:
我想知道,在以下代码中,编译器如何从 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参数的值? (机制是什么?)如果我正常传递数组,为什么编译器不能做同样的事情? (通常我的意思是不使用参考符号)
【问题讨论】:
-
Type arr[arrsize]来自 C :-/
标签: c++ arrays templates reference template-argument-deduction