使用lambda函数时可能的堆栈溢出?

时间:2014-08-12 18:40:21

标签: c++ c++11 boost recursion

http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp给出的示例中,我们可以看到这样的代码块:

  void do_accept()
  {
    acceptor_.async_accept(socket_,
        [this](boost::system::error_code ec)
        {
          if (!ec)
          {
            std::make_shared<session>(std::move(socket_))->start();
          }

          do_accept();
        });

我是C ++ 11的新手。所以我想知道这个代码是否会导致堆栈溢出(过多的递归调用),因为do_accept()会记录do_accept()的回调。

感谢。

1 个答案:

答案 0 :(得分:7)

不。 async_accept将触发异步调用并立即返回 - do_accept因此在调用后立即返回。

稍后,异步调用将完成,并且将调用do_accept以触发另一个异步调用。不涉及递归。