#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 998c++ lambda代码是怎么回事?我尝试了g++-5.0和g++4.9编译器。所有的结果都是这个错误。
发布于 2015-07-17 20:10:22
ff通过引用捕获f,但f对于wrapper是本地的。当您返回ff时,该引用就会悬空,并且在调用ff时会触发未定义的行为。
https://stackoverflow.com/questions/31475352
复制相似问题