gpt4 book ai didi

C++:通过模板传递参数与通过函数参数传递参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:48 28 4
gpt4 key购买 nike

通过模板发送参数有什么用吗?如果是这样,这与通过内部堆栈发送参数有何不同?示例:

void myMethod(int argument){//Do something with *argument* };

对比

template<int argument>
void myMethod(){//Do something with *argument* };

Thinking in C++,第 1 卷,第 2 版,在 Templates in depth 一章下,关于非类型模板参数只有几句话,我觉得我没有完全理解他们的目的。

编辑: 感谢您的解释。如果可以的话,我会标记这两个答案,因为它们相互补充。

最佳答案

不同之处在于模板的值是在编译时决定和固定的;即,当您编译程序时。编译完成后,您永远无法更改它们,它们将永远被视为常量。

所以,用:

template<int argument>
void myMethod(){//Do something with *argument* };

如果您调用 myMethod<5>() , 那么 argument 的值始终为 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
}
}

关于C++:通过模板传递参数与通过函数参数传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42577867/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com