Item34 Prefer lambdas to std::bind

本文探讨了在C++11及更高版本中,为什么应优先选择lambda表达式而不是std::bind。尽管std::bind在早期被广泛使用,但C++11引入的lambda提供了更好的可读性、更清晰的代码表达和潜在的性能提升。C++14的增强使得lambda可以完全替代std::bind,解决了std::bind在调用时机、重载处理和内联优化上的问题。同时,lambda更直观地展示了参数传递方式,降低了误用风险。因此,推荐使用lambda来替换std::bind。
摘要由CSDN通过智能技术生成

   C++11中的std::bind是对C++98中的std::bind1ststd::bind2nd的改进和继承。而std::bind是在2005年的时候 作为标准库的一部分,起初是放在TR1规范中,拥有自己独立的命名空间std::tr1。因此很多C++程序员在很早就开始使用std::bind,所以如果要让这些C++程序员放弃对std::bind的使用,会多少有些不情愿。但是在C++11放弃对std::bind的使用是个不错的选择,因为在C++11中的lambda要比std::bind更好。而C++14对lambda进行了加强,加强后的lambda可以完全替换std::bind了。而lambda之所以要比std::bind要好主要有几个方面,第一就是可读性好,例如下面这个例子:

// typedef for a point in time (see Item 9 for syntax)
using Time = std::chrono::steady_clock::time_point;

// see Item 10 for "enum class"
enum class Sound { Beep, Siren, Whistle };
// typedef for a length of time

// at time t, make sound s for duration d 
void setAlarm(Time t, Sound s, Duration d);

// setSoundL ("L" for "lambda") is a function object allowing a
// sound to be specified for a 30-sec alarm to go off an hour
// after it's set
auto setSoundL =
[](Sound s) {
       // make std::chrono components available w/o qualification
       using namespace std::chrono;
      setAlarm(steady_clock::n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值