gpt4 book ai didi

c++11 lambda高阶函数包装器递归错误

转载 作者:太空狗 更新时间:2023-10-29 20:57:12 24 4
gpt4 key购买 nike

#include <iostream>
#include <functional>
using namespace std;

function<int(int)> wrapper(function<void(int)> f)
{
auto ff = [&](int a) {
cout << "in wrapper " << a << endl;
f(a);
return 1;
};
return ff;
}

int main()
{
auto fa = wrapper([](int a){
cout << "in fa " << a << endl;
});
fa(999);
wrapper([&fa](int b){
cout << "in anon " << b << endl;
fa(998);
})(997);
}

上面的代码会打印

in wrapper 999
in fa 999
in wrapper 997
in anon 997
in wrapper 998
in anon 998
in wrapper 998
in anon 998
in wrapper 998
in anon 998
in wrapper 998
in anon 998
in wrapper 998
in anon 998
in wrapper 998
in anon 998
..........

直到段错误。

我用javascript写了同样的代码

function  wrapper(f)
{
var ff = function(a) {
console.log("in wrapper %s", a);
f(a);
return 1;
};
return ff;
}

(function ()
{
var fa = wrapper(function(a){
console.log("in fa %s", a);
});
fa(999);
wrapper(function(b){
console.log("in anon %s", b);
fa(998);
})(997);
})();

它会打印

in wrapper 999
in fa 999
in wrapper 997
in anon 997
in wrapper 998
in fa 998

C++ lambda 代码有什么用?我尝试了 g++-5.0 和 g++4.9 编译器。都以这个错误结束。

最佳答案

ff 通过引用捕获 f,但 fwrapper 的本地文件。当您返回 ff 时,该引用变为悬空,并且在调用 ff 时触发未定义的行为。

关于c++11 lambda高阶函数包装器递归错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31475352/

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