在Boost库asio示例中,处理程序赋值之前的[this,self]是什么意思?

Aus*_*Aus 3 c++ boost boost-asio c++11

我以前从未见过这样的语法"[this,self]",我以前编程C并用C++做了一点,现在学习C++ 11和Boost库,编译器很满意,但我无法想象它是如何工作的以及它的作用.

void do_read()
  {
    auto self(shared_from_this());
    socket_.async_read_some(boost::asio::buffer(data_, max_length),
        [this, self](boost::system::error_code ec, std::size_t length)
---------^
        {
          if (!ec)
          {
            do_write(length);
          }
        });
  }
Run Code Online (Sandbox Code Playgroud)

它来自此链接中的 Boost库Async Echo服务器示例

Sho*_*hoe 6

这是lambda 的捕获列表.它捕获变量this(指针)和self上面一行声明的变量.

    [...](...){...}
//    A    B    C
Run Code Online (Sandbox Code Playgroud)

以上是代码中lambda的简化语法.A是上面提到的捕获列表(用于从当前范围"捕获"变量).B是参数列表(就像在函数中一样)并且C是正文(再次,就像一个函数).