• []: 不捕获任何变量。
  • [=]: 按值捕获所有变量(不能修改外部变量)。
  • [&]: 按引用捕获所有变量(可以修改外部变量)。
  • [x]: 按值捕获指定变量。
  • [&x]: 按引用捕获指定变量。
  • [this]: 捕获当前对象的 this 指针,允许访问类的成员。
  • [=, &x]: 按值捕获所有变量,但按引用捕获 x。
  • [&, x]: 按引用捕获所有变量,但按值捕获 x。
  • [=, this]: 按值捕获所有变量并捕获当前对象。

C++14 Lambda 表达式的捕获列表支持直接移动捕获。C++11 只允许按值或按引用捕获外部变量,而 C++14 支持通过移动语义捕获。

示例:

auto ptr = std::make_unique<int>(42);
auto lambda = [p = std::move(ptr)]() {
    std::cout << *p << std::endl;  // 打印 42
};