16.1.5 非類型模板形參
在調用函數時,非類型形參將用值代替,值的類型在模板形參表中指定。
template<class T, size_t N>
void array_init(T (¶m)[N])
{
for(size_t i=0;i!=N;++i)
{
cout<<param[i]<<endl;
}
}
template<class T, size_t N>
void array_init(T (¶m)[N])
{
for(size_t i=0;i!=N;++i)
{
cout<<param[i]<<endl;
}
}int i[]={1,2,3,4};
array_init(i);
int i[]={1,2,3,4};
array_init(i);模板非類型形參是模板定義內部的常量值,在需要常量表達式的時候,可使用非類型形參(就像這裡所做的一樣)指定數組的長度。
類型等價性與非類型形參
對模板的非類型形參而言,求值結果相同的表達式被認為是等價的。
在函數模板內部完成的操作限制了可用於實例化該函數的類型。程序員的責任是,保證用作函數實參的類型實際上支持所用的任意操作,以及保證在模板使用那些操作的環境中那些操作運行正常。
編寫模板代碼時,對實參類型的要求盡可能少是很有益的。
雖然簡單,但它說明了編寫泛型代碼的兩個重要原則:
模板的形參是const引用。
函數體中的測試只用<比較。
通過將形參設為const引用,就可以允許使用不允許復制的類型。
摘自 xufei96的專欄