我想知道如何在下面的代碼片段中編譯器從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