是否有通过模板发送参数的目的?如果是这样,这与通过内部堆栈发送参数有何不同?例:
void myMethod(int argument){//Do something with *argument* };
VS
template<int argument>
void myMethod(){//Do something with *argument* };
在Thinking in C,第1卷,第2版,在“模板深入”一章中,关于非类型模板参数的说法很少,我觉得我并不完全理解它们的用途.
编辑:谢谢你的解释.如果可以,我会标记两个答案,因为它们互为补充.
最佳答案 不同之处在于,对于模板,值在编译时决定并修复;即,编译程序时.在编译完成后,你不能改变它们,它们永远被认为是常量.
所以,用:
template<int argument>
void myMethod(){//Do something with *argument* };
如果你调用myMethod< 5>(),那么参数的值总是5,并且该函数在运行时实际上没有任何参数.现在,如果调用myMethod< 6>(),编译器将重新创建相同的函数,但具有另一个常量值.因此,您在运行时将拥有2个函数.
另一方面,使用常规方法,您可以在运行时更改它们,即在程序运行时更改它们.再次调用该函数将只执行具有不同参数值的相同代码.
例:
template <int L>
void DoSomething()
{
int a[L]; //this works fine here! Becasue L is just a constant that is resolved at compile-time
for(int i = 0; i < L; i++)
{
//do stuff
}
}
void DoSomething(int L)
{
int a[L]; //this won't work, because L is a variable that can be set while the program is running
for(int i = 0; i < L; i++)
{
//do stuff
}
}