【问题标题】:Templates are slower that literal functions? [closed]模板比文字功能慢吗? [关闭]
【发布时间】:2011-11-15 07:57:45
【问题描述】:

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

【问题讨论】:

  • 这是一个不具建设性的问题示例。您似乎没有努力自己寻找答案。
  • @Björn“不具建设性”根本不是这个意思。
  • @DavidHeffernan:你的评论实际上让我再次阅读了接近原因的描述,你是对的,我在这里弄错了(之前一定是误读了)。似乎适当的行动是投反对票(这个问题没有显示任何研究工作)。
  • @tonnot 请注意,您从未在这里接受过答案,也从未投票过。鼓励这个社区的成员同时做这两个:见faq

标签: c++ templates


【解决方案1】:

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

然而,还要注意,一个仿函数经常会击败两者(例如,恰好发生在上面引用的测试中)。

【讨论】:

    【解决方案2】:

    通常不会有任何区别,因为编译器会将实例化的模板扩展为相同的代码,就像您自己编写没有模板一样。

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

    【讨论】:

      【解决方案3】:

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

      在运行时,它们的工作方式与任何其他函数完全相同。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          每个模板都会收到一个类型,因此在编译后是一个“文字函数”。所以我猜他们并不慢..

          【讨论】:

            【解决方案6】:

            没有。当模板被实例化时,编译器使用模板参数生成一个函数,生成一个函数,就好像您使用这些类型编写了一个非模板函数一样。

            【讨论】:

              猜你喜欢
              • 2010-10-14
              • 2010-09-08
              • 2015-02-12
              • 2021-09-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多