gpt4 book ai didi

c++ - 为什么在使用递归 lambda 时出现编译错误?

转载 作者:行者123 更新时间:2023-11-30 00:42:57 24 4
gpt4 key购买 nike

我正在尝试定义一个递归 lambda。

在其他语言中,例如 go,它可以声明为:

func main() {
var f func()
f = func() { f() }
}

可能是用模板实现导致的?

#include <functional>

int main() {
std::function<int()> f;
int a = 0;
f = [f,&a]() -> int {
a++;
if (a > 2) {
return 1;
}
return f();
};
if (f() != 0) {
goto out;
}

out:
return 0;
}

这是我的编译器:

Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

最佳答案

您正在按值捕获 f。您想通过引用捕获它以获取递归 lambda。这是一个递归 lambda 示例:

#include <functional>
#include <iostream>

int main() {
std::function<int(int)> factorial;

factorial = [&factorial](int i) {
if (i < 2) {
return 1;
}
return i * factorial(i - 1);
};
std::cout << "5! = " << factorial(5) << '\n';
}

关于c++ - 为什么在使用递归 lambda 时出现编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57232535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com