C++11中的std::bind是对C++98中的std::bind1st 和std::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