递归 lambda 通过引用

recursive lambda via reference

本文关键字:引用 lambda 递归      更新时间:2023-10-16

这段代码正确吗?

std::function<int(int)> f = [&f](int n) -> int
{
    return n <= 1 ? 1 : n * f(n - 1);
};
int x = f(42);

在对象构造作为对 lambda 的引用传递之前,是否存在任何潜在问题?或者这段代码绝对正确?

按值捕获 f 会导致 msvc2010 编译器崩溃。

这应该可以正常工作,只要您遵循对存储在 lambda 中的堆栈变量的引用规则。它是定义明确的 C++11 代码。