C:通过模板Vs通过函数参数传递参数

是否有通过模板发送参数的目的?如果是这样,这与通过内部堆栈发送参数有何不同?例:

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
    }
}
点赞