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中文网其他相关文章!