问题很简单:当我编写 lambda 表达式时,C++ 编译器自动为我生成的仿函数对象的生命周期是多少?
我进行了快速搜索,但找不到满意的答案。特别是,如果我在某处传递 lambda,它在那里被记住,然后我超出范围,一旦稍后调用我的 lambda 并尝试访问我的堆栈分配但不再事件的捕获变量,将会发生什么?或者编译器是否以某种方式防止这种情况?或者什么?
最佳答案
取决于您捕获变量的方式。如果您通过引用 ([&]
) 捕获它们并且它们超出范围,则引用将无效,就像普通引用一样。如果您想确保它们的生命周期超出其范围,则按值捕获它们 ([=]
)。
关于c++ - C++ 中 lambda 派生的隐式仿函数的生命周期是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5207467/