C ++ async lambda"递归"呼叫

时间:2017-04-20 14:00:34

标签: c++ recursion lambda

无法弄清楚为什么这个看似递归的readKey调用不会导致调用堆栈增长:

#include <future>
#include <iostream>

void readKey()
{
    std::async(std::launch::async, [](){ 
        if (getchar() != 113) // 'q' to quit
            readKey();
    });
}

int main(int, char**)
{
    readKey();
    return 0;
}
谢谢你解释!

: - )

1 个答案:

答案 0 :(得分:1)

它不是递归调用,因为您在具有单独堆栈的新线程(std::launch::async)上调用它。因此,当您在readKey中调用main时,它会生成一个新线程,其中readKey将被调用,即使不等待它也会退出。