C++ lambda 。需要如何捕获指针?

标签 c++ c++11 pointers lambda object-lifetime

比如有一个方法:

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/

相关文章:

c++ - 奇怪的 std::wregex 行为

使用内存地址在不带指针的 C 函数中更改数组

c++ - 指针还是数组?

c++ - 使用指针反转字符串

c++ - 在运行时编译和 C++ 中的#include 自定义 header

c++ - 使用 std::unique_ptr/std::shared_ptr const 正确组合

c++ - 如何使用基于范围的 for 循环遍历本身是 JSON 数组的 Rapidjson 文档?

c++ - C++ 标准是否允许双括号标量初始化?

c++ - Visual C++ 6.0 中查找源文件的预设位置

c++ - 如何更改指针访问运算符的含义