通过引用递归lambda

时间:2012-04-06 16:06:14

标签: c++ lambda c++11

这段代码是否正确?

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

int x = f(42);

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

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

1 个答案:

答案 0 :(得分:1)

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