lambda 表达式中的参数(通过值捕获)的有效期限是多长?该参数在 lambda 本身的生命周期内有效,还是仅在调用期间有效?
例如:
[value = 5] { DoSomething(&value) }
&value
lambda 调用完成后指针是否仍然有效?(当然假设 lambda 本身还活着。)
我见过这个类似名称的问题,但这涉及修改表达式内的lambda ,而不是生命周期。
为了回答这些评论,我还怀疑value
被捕获为成员(因此应该在表达式之外保持活动状态)。但我担心这可能是错误的,因为value
理论上可以捕获为成员,然后按值传递到表达式本身(因此我们看到的引用不会保持活动状态)。
lambda 是匿名结构的简写,
operator()
由编译器自动生成。按值捕获实际上是此结构中的数据成员(关于按引用捕获 - 它们可能会也可能不会引入成员 - 请参阅 @NathanOliver 的评论)。
&value
只要该结构的实例处于活动状态,指针(即数据成员的地址)就有效。它可能是在 lambda 执行之后。
例如以下情况:
&value
传递给的指针DoSomething
一直有效,直到l
超出底部范围}
并被销毁。