为什么使用递归lambda时会遇到编译错误
Why I get compile error when using a recursive lambda?
我正在尝试定义递归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';
}
std::function
在大多数情况下都很好,但是如果您的递归lambda证明是性能瓶颈,那么您可以将lambda传递到自身中,并有一个额外的参数:
int a = 0;
auto f = [&a](auto&& go) -> int { //explicit return type is required here
++a;
if (a > 2) { return 1; }
return i * go(go);
};
f(f);
请注意,在lambda参数中,将lambda传递到lambda所需的 auto
至少需要C 14。
相关文章:
- 编译包含字符串的代码时遇到问题
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 我在C++中遇到了这个奇怪的编译错误
- 编译 Cilk Plus 程序时遇到问题
- 如何解决我在 Ubuntu 19.04 下使用 GLFW 时遇到的这个编译问题?
- 我试图用c++编写递归fibonacci序列,但当我编译时,我遇到了一个错误
- 在 64 位 Linux armv8 计算机上编译 32 位二进制文件时遇到问题
- 为什么使用递归lambda时会遇到编译错误
- 布尔值是通过引用传递的,但我仍然在 cpp 中遇到编译错误
- 遇到内部编译错误时该怎么办
- 使用 bazel 从源代码构建张量流服务遇到错误:C++规则'@org_tensorflow//…'编译失败(出口 4)
- 为什么我在编译模板班时遇到困难
- 我在使用 ffmpeg 进行开发时遇到的编译错误
- 当 Mingw 为 C++ 编译 OpenCV 时,我遇到错误?
- 我在这个程序上遇到了麻烦.只有1个编译错误
- 当我编译并即将推动元素时,我会遇到细分错误
- 使用GCC编译某些软件包在静态上遇到了有关libprocps.a的错误
- 初学者C - 编译我的代码时遇到困难
- 为什么我会在此代码中遇到编译错误
- 为什么我在代码块中遇到编译错误,因为我使用的变量超出了范围?