What happens if I capture a local variable by refe

2019-01-25 04:37发布

Suppose I use a lambda as a callback function, and when creating the lambda, I capture a local function variable by reference. Now suppose that the lambda object does not get executed until after that local function variable goes out of scope. What happens?

I realize that it would be pretty stupid for someone to do so if there's a chance of it happening, but I am almost positive that someone would end up doing it.

标签: c++ lambda c++11
2条回答
家丑人穷心不美
2楼-- · 2019-01-25 04:52

The same thing that happens when you return a reference to a local variable: undefined behavior.

查看更多
女痞
3楼-- · 2019-01-25 04:54

Yes, that would be following a dangling reference. It sounds like you're worried about interface design: "I am almost positive that someone would end up doing it." Please don't reject lambdas and std::function on this basis, as they are no more dangerous than any other alternative. Lambdas are just a simpler way to define local functors. std::function is the best interface to persistent, polymorphic functors, lambda or not.

The scope issue is why it's easier to capture by value. The user won't get a reference unless they write &. Of course, the danger is that someone would get in the habit of starting all their lambda functions with [&], since references are "faster." Hopefully any such person would learn their lesson soon enough… although some pointer-happy folks are just incorrigible.

查看更多
登录 后发表回答