#include <iostream> #include <functional> using namespace std; function<int(int)> wrapper(function<void(int)> f) { auto ff = [&](int a) { cout << "in wrapper " << << endl; f(a); return 1; }; return ff; } int main() { auto fa = wrapper([](int a){ cout << "in fa " << << endl; }); fa(999); wrapper([&fa](int b){ cout << "in anon " << b << endl; fa(998); })(997); } the above code print
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 .......... until segmentation fault.
i write same code in 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); })(); it print
in wrapper 999 in fa 999 in wrapper 997 in anon 997 in wrapper 998 in fa 998 what's c++ lambda code? tried g++-5.0 , g++4.9 compiler. ended error.
ff captures f reference, f local wrapper. when return ff, reference becomes dangling, , undefined behaviour triggered upon calling ff.
Comments
Post a Comment