小编skt*_*pin的帖子

“Lambda 很便宜” - 真的吗?在什么情况下?

这篇文章宣称使用 C++ Lambdas 是“便宜的”: Lambdas 不是魔法 - 第 2 部分

他们演示了如何将 lambda 传递给现有的 std 函数/模板。一篇文章演示了如何使用“auto”作为函数的返回类型以在不使用 std::function 的情况下返回 lambda。

我看到的任何文章都没有演示如何制作自己的函数,尤其是。类成员函数,采用 lambda 或更多,不使用 std::function。

所以这个大胆的“lambdas 很便宜”的声明 - 在现实世界的场景中真的是这样吗?

作为参考:“便宜”对我来说是为了解决这个问题:在具有数百 KB 内存和两位数 MHz 速度的嵌入式裸机项目中非常有用。(我一直在该领域使用 C++ 的一个健全的子集,并且正在寻找我可以使用的其他内容)

据我所知, std::function<> 并不便宜。一方面,作为 std::function 传递的 Lambda 显然无法再进行内联优化。但更糟糕的是, std::function<> 是 32 字节大。同样显然,如果捕获的超过适合,可能会使用动态分配?这一切听起来像是个坏消息。

因此,虽然我正在寻找不使用 std::function 使用 lambdas 的方法,并且只找到一个返回 auto 的示例,但我尝试了这个:我制作了一个非常简单的类,它使用“auto”作为成员函数中的参数类型,以及编译器似乎对它很满意(尽管它不像 std::function 就预期的函子参数而言是“自记录”代码)。

struct FuncyClass
{   unsigned func(auto fnx)
    {   return 2 * fnx(7);
    }
};

int main()
{   FuncyClass fc;
    auto result = fc.func( [](auto x){return x*3;} );
    
    printf("Result: …
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++14

1
推荐指数
1
解决办法
230
查看次数

标签 统计

c++ ×1

c++14 ×1

lambda ×1