C++ lambda.如何捕获指针?

kaa*_*kaa 4 c++ lambda pointers object-lifetime c++11

例如,有一种方法:

void foo( A* p )
{
    auto l = [=](){ /* Do Something using p */ };

   // Use l ...
}
Run Code Online (Sandbox Code Playgroud)

我应该如何捕获指针:通过引用或值?里面的lambda p没有改变,只是使用了它的方法.

Ant*_*ine 5

它是指针的事实不会影响您关于ref或值捕获的决定.由于指针足够小并且您不想编写它,因此您可以按值捕获.

我通常使用以下规则:

  • 如果它比指针大,请使用引用,因为复制可能比取消引用更昂贵
  • 如果你想看看lambda外部的变化,显然引用是唯一的选择
  • 否则(如果它很小并且不会改变)按值捕获

因此,应该通过值捕获不会更改的指针.如果编译器检测到没有写入,它可能会通过引用优化捕获并且无论如何都会传递值,但我不确定.