理解 C 14 中 std::bind 的功能
在 C 编程领域,std::bind 和 lambda 已经广泛用于将函数和对象绑定到参数。最初,boost::bind 和 boost::lambda 占据了统治地位,但随着 C 标准的进步,这些功能被直接合并到语言中。
C 14:std: 的衰落bind
随着 C 14 的引入,lambda 简化了创建可调用对象的过程,减少了对 std::bind 的需求在大多数情况下。这一变化引发了关于 std::bind 是否变得多余的争论。
std::bind 的特殊用例
虽然 lambda 提供了通用的解决方案,但 std: :bind 保留了一些它脱颖而出的特殊用例lambdas:
重载参数: 与 lambda 不同,std::bind 支持重载函数参数。例如:
struct foo { template <typename A, typename B> void operator()(A a, B b) { cout << a << ' ' << b; } }; auto f = bind(foo(), _1, _2); f("test", 1.2f); // prints "test 1.2"
捕获表达式: 在 C 11 中,lambda 无法捕获表达式,而 std::bind 允许。例如:
auto f1 = std::bind(f, 42, _1, a + b);
C 14 进步:Lambda 占据中心舞台
C 14 引入了重要的增强功能,消除了 std 的优势: : 绑定lambdas:
std::bind 的缺点
尽管 std::bind 的用例有限,但它有一定的用途缺点:
结论
在 C 14 及更高版本中,lambda 已成为绑定函数和对象的首选。虽然 std::bind 在特定场景中仍然有用,但面对 lambda 的多功能性和增强的功能,其广泛的应用范围已经减弱。然而,了解这两种技术的复杂性可以让 C 开发人员在其编程任务中做出明智的决策。
以上是`std::bind` 在 C 14 中是多余的吗?什么时候你还应该使用它?的详细内容。更多信息请关注PHP中文网其他相关文章!