首页 > 后端开发 > C++ > 正文

C 中的 Lambda 与 Bind:什么时候应该选择每个?

Susan Sarandon
发布: 2024-11-01 02:49:28
原创
697 人浏览过

Lambdas vs. Bind in C  : When Should You Choose Each?

C 中的 Lambda 与 Bind:多态性和效率

在类似任务中比较 C 0x lambda 和 std::bind 的用法时,两者之间的选择可能会受到多态性和效率等因素的影响。

Bind 与 Lambda 详细信息

考虑以下示例,其中 lambda 和 bind用于使用分布和引擎生成随机数:

// Using lambda
auto dice = [&]() { return distribution(engine); };

// Using bind
auto dice = bind(distribution, engine);
登录后复制

多态

与单态(即具有固定类型)的 lambda 不同,std: :bind 允许多态行为。这意味着 Bind 可用于创建未知类型的函数,如下所示:

struct foo {
  typedef void result_type;

  template <typename A, typename B>
  void operator()(A a, B b) {
    cout << a << ' ' << b;
  }
};

auto f = bind(foo(), _1, _2);
f("test", 1.2f); // will print "test 1.2"
登录后复制

在此示例中,a 和 b 的类型是在调用 f 时在运行时推导的。 lambda 不具备这种灵活性。

效率

一般来说,当按值使用捕获的变量时,lambda 往往比绑定更高效。这是因为 lambda 直接捕获变量,而 bind 创建一个引用捕获变量的闭包对象。然而,当捕获的变量较大或函数被频繁调用时,bind 可能会具有优势。

结论

lambda 和 bind 之间的选择取决于具体需求的应用程序。 Lambda 提供多态性,并且可以有效捕获小型值类型变量。 Bind 提供了更大的灵活性,在处理大型或频繁调用的函数时可能更可取。

以上是C 中的 Lambda 与 Bind:什么时候应该选择每个?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!