首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >兰伯达建筑性能和静态兰达?

兰伯达建筑性能和静态兰达?
EN

Stack Overflow用户
提问于 2015-12-01 01:25:10
回答 1查看 227关注 0票数 1

考虑以下代码:

代码语言:javascript
复制
// Classic version
template <class It>
It f(It first, It last)
{
    using value_type = It::value_type;
    auto lambda = [](value_type x){return x > 10 && x < 100;};
    return std::find_if(first, last, lambda);
}

// Static version
template <class It>
It f(It first, It last)
{
    using value_type = It::value_type;
    static auto lambda = [](value_type x){return x > 10 && x < 100;};
    return std::find_if(first, last, lambda);
}

两者在性能上有什么区别吗?一个lambda函数的构建时间是多少?静态版本在性能方面是否更好,因为lambda只构建了一次?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-01 01:48:50

构建无捕获的lambda类似于构建一个空的struct。一个现代的编译器应该能够完全地优化它。

例如,请参见此简单程序的程序集输出:

代码语言:javascript
复制
int main(int argc, const char* argv[])
{
  auto l = [](int i){ return i*i; };
  return l(argc);
}   

装配(gcc 5.2.0,从-O1LIVE开始):

代码语言:javascript
复制
main:
    movl    %edi, %eax
    imull   %edi, %eax
    ret

如你所见,没有任何残留的羊驼,等等。它是完全内联的。

虽然您的特定用例可能需要更多的分析,但是在静态和非静态lambdas之间可能没有可测量的差别。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34011065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档