c++ 在 lambda 中通过引用捕获局部变量,可以吗?

问题描述 投票:0回答:1

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 的生命周期内存在...

捕获临时数据似乎是不正确的..尽管它可以工作并且没有编译器警告。

c++11
1个回答
0
投票

是的,没关系,因为在其生命周期结束后您将无法访问

removed

如果您将 lambda 传递给存储 lambda 以便执行的函数,在引用的变量超出范围之后,则可能会出现该问题,但这里的情况并非如此。

© www.soinside.com 2019 - 2024. All rights reserved.