std::list<uint32_t> mylist;
void someFunc() {
bool removed = false;
mylist.remove_if([&removed, this](const uint32_t & item){
if (item == 1) {
removed = true;
return true;
}
return false;
});
if (removed ) {
// ...
return;
}
}
我正在使用 cpp 11,std::list 中的“remove_if”不会返回任何内容,而未来版本会返回任何内容。
是我上面可以接受/定义的。 我通过引用捕获“删除”的局部变量,在 lambda 中修改它,然后使用它。 lambda 仅在 someFunc() 内调用,因此“已删除”应该在 lambda 的生命周期内存在...
捕获临时数据似乎是不正确的..尽管它可以工作并且没有编译器警告。
是的,没关系,因为在其生命周期结束后您将无法访问
removed
。
如果您将 lambda 传递给存储 lambda 以便执行的函数,在引用的变量超出范围之后,则可能会出现该问题,但这里的情况并非如此。