c++ - 通过引用递归 lambda

标签 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 编译器崩溃。

最佳答案

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

关于c++ - 通过引用递归 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10046035/

相关文章:

c++ - bash 脚本在使用 popen() 时不将返回码返回给调用 C++ 程序

c - C语言中的lambda函数是什么

Java 8 如何使用 lambda 表达式简化 for 循环

c++ - 避免在树结构中使用强制转换

c++ - 简化类中的 `operatorX` 函数以按给定顺序比较相同类型的属性的正确方法或设计模式?

c++ - Visual C++ 和超长字符串

c++ - 关于函数内部方程的简单问题

c# - 数组或对象的指针/引用句柄会影响其大小吗?

Java 泛型不兼容类型(不存在类型变量的实例)

c++ - STL Map<string, > 与 LLVM 库冲突