请看下面的代码:
当我运行这段代码时,预期输出数字
如果
std::function<int(int)> makeFibonacci() {
std::function<int(int)> fibonacci = [&fibonacci](int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 1;
}
return fibonacci(n-1) + fibonacci(n-2);
};
return fibonacci;
};
int main() {
std::function<int(int)> fibonacci = makeFibonacci();
std::cout << fibonacci(6) << std::endl;
return 0;
}
当我运行这段代码时,预期输出数字
8
。但是,当我将捕获的 &fibonacci
改为只是 fibonacci
进行按值捕获时,程序实际上在运行 makeFibonacci
的第一行就崩溃了。如果
fibonacci
(第二行)是 makeFibonacci
函数的本地变量,并且因此在函数退出时超出范围,那么它如何被引用并递归使用呢?另外,为什么当我按值捕获 lambda 时,程序会崩溃?