比如有一个方法:
void foo( A* p )
{
auto l = [=](){ /* Do Something using p */ };
// Use l ...
}
我应该如何捕获指针:通过引用还是通过值? 内部 lambda p 没有改变,只是使用了它的方法。
最佳答案
它是一个指针这一事实不会影响您对 ref 或值捕获的决定。由于指针足够小,你不想写它,你可以按值捕获。
我通常使用以下规则:
- 如果它比指针大,使用引用,因为复制可能比取消引用更昂贵
- 如果您想从 lambda 外部查看更改,显然引用是唯一的选择
- 否则(如果它很小且不会改变)按值捕获
所以一个不会改变的指针应该被值捕获。如果编译器检测到没有写入,它可能会优化引用捕获并按值传递,但我不确定。
关于C++ lambda 。需要如何捕获指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22406091/