模板比文字函数慢

Templates are slower that literal functions?

本文关键字:函数 文字      更新时间:2023-10-16

这是我的一个重要疑问。模板函数是否比文字函数慢(即使用完整类型声明)?

根据我的测试(例如,在之前的答案中),模板函数可以与非模板函数具有相同的速度,但通常不会。最大的区别在于,模板函数通常会通过引用接收其形参,以防它们"大"。非模板函数更有可能按值接收其参数,如果参数相当小,这通常会提高速度。但是,如果都通过引用接收它们的参数,我发现至少在某些情况下,模板实际上会比非模板代码快一点。

但是也要注意,函子经常会打败这两者(例如,正是在上面引用的测试中发生的)。

一般来说没有区别,因为编译器将实例化的模板扩展成相同的代码,就好像你自己编写的一样。

换句话说,模板是在编译时处理的,而不是在运行时处理的。

不,它们在编译时被编译成常规函数。

在运行时,它们与其他函数完全相同。

我认为正确的答案如下:模板函数具有相同的运行时性能,但在某些情况下可能需要更长的编译时间

每个模板都将接收一个类型,因此编译后是一个"文字函数"。所以我猜他们并不慢。

No。当模板被实例化时,编译器使用模板形参生成一个函数,生成的函数与使用这些类型编写的非模板函数一模一样。