【发布时间】:2012-01-25 13:46:59
【问题描述】:
这个 lambda 递归有效吗?
#include <functional>
#include <iostream>
int main() {
std::function<int(int)> g = [&g](int k) {
return (k ? k * g(k-1) : 1);
};
std::cout << g(10); // 3628800
}
它是appears to compile and run ok,但我很担心在我初始化它的同一个语句中关闭g。 1-10 的严格效度...?
【问题讨论】:
-
C++0x 示例 here 将其分成 2 个语句,但从未解释原因。
-
好吧,
g已经在初始化程序之前声明了,我很确定引用已声明但未初始化的对象是有效的,在这种情况下这很好。我会看看能不能找到一些标准的来支持它。 -
@SLaks: 它也不会在 java 中编译,重点在哪里?
-
@AaronMcDaid:你正在尝试发明Y Combinator。函数式编程很有趣。
-
@Downvoter:那为什么?