gpt4 book ai didi

C++ lambda 错误

转载 作者:行者123 更新时间:2023-11-30 01:12:36 25 4
gpt4 key购买 nike

我看到了 C++ lambda 源代码。

#include <functional>
#include <iostream>

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

// factorial = [factorial](int n)->int // runtime error
factorial = [&factorial](int n)->int // right
{
if (n == 1) {
return 1;
}
else {
return n * factorial(n - 1);
}
};

std::cout << factorial(5) << "\n";
}

我不明白为什么会出现运行时错误。
感谢您的关心!

最佳答案

factorial = [factorial](int n)->int

此版本按值捕获 factorial。在 lambda 表达式 factorial 为空的地方,所以你得到一个空的 std::function 的拷贝,你会得到一个 std::bad_function_call 如果您尝试调用它。 factorial =/*...*/; 分配给原始对象,它与为闭包创建的拷贝分开。

factorial = [&factorial](int n)->int

此版本通过引用捕获 factorial,即 lambda 内部的 factorial 与外部的 factorial 命名相同的对象。因此,赋值 factorial =/*...*/; 会影响 lambda 中的 factorial 变量,因此您调用了一个有效的函数。

关于C++ lambda 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33776307/

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