如果我通过引用捕获局部变量会发生什么,并且它超出范围?

s73*_*v3r 18 c++ lambda c++11

假设我使用lambda作为回调函数,并且在创建lambda时,我通过引用捕获本地函数变量.现在假设在本地函数变量超出范围之后才会执行lambda对象.怎么了?

我意识到,如果有机会发生这样做,那将是非常愚蠢的,但我几乎肯定有人会最终做到这一点.

Pot*_*ter 16

是的,这将是一个悬挂的参考.听起来你担心界面设计:"我几乎肯定会有人最终做到这一点." 请不要std::function在此基础上拒绝lambdas ,因为它们并不比任何其他选择更危险.Lambdas只是定义局部仿函数的一种更简单的方法.std::function是持久的,多态函子,lambda与否的最佳接口.

范围问题是为什么它更容易按价值捕获.除非他们写,否则用户将不会获得引用&.当然,危险在于有人会习惯于启动所有lambda函数[&],因为引用"更快".希望任何这样的人都能尽快学到他们的教训......虽然一些指针快乐的人是不可救药的.


Nic*_*las 12

返回对局部变量的引用时发生的事情:未定义的行为.