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; templatevoid operator()(A a, B b) { cout 在此示例中,a 和 b 的类型是在运行时调用 f 时推导的。 lambda 不具备这种灵活性。
效率
一般来说,当按值使用捕获的变量时,lambda 往往比绑定更高效。这是因为 lambda 直接捕获变量,而 bind 创建一个引用捕获变量的闭包对象。然而,当捕获的变量较大或函数调用频繁时,bind 可能会具有优势。
结论
lambda 和 bind 之间的选择取决于具体需求的应用程序。 Lambda 提供多态性,并且可以有效捕获小型值类型变量。 Bind 提供了更大的灵活性,在处理大型或频繁调用的函数时可能更可取。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3