这个问题是关于采取静态已知大小的数组功能。
举个例子以下最低的程序:
#include <iostream>
template<size_t N>
void arrfun_a(int a[N])
{
for(size_t i = 0; i < N; ++i)
std::cout << a[i]++ << " ";
}
int main()
{
int a[] = { 1, 2, 3, 4, 5 };
arrfun_a<5>(a);
std::cout << std::endl;
arrfun_a<5>(a);
return 0;
}
其中,在运行时,打印预期的结果:
2 3 4 5 6
3 4 5 6 7
然而,当我试图让我的编译器(VS 2010)推导出5
,它could not deduce template argument for 'int [n]' from 'int [5]'
。
研究有点导致更新arrfun_b
其中模板参数推导的工作原理:
template<size_t n>
void arrfun_b(int (&a)[n])
{
for(size_t i = 0; i < n; ++i)
std::cout << ++(a[i]) << std::endl;
}
该方案的结果是一样的,无论是arrfun_a
或arrfun_b
被调用。
到目前为止,我已经找到了唯一的区别就是模板参数推导是否可行,是否有可能以N不是5调用函数...