[]
: 不捕获任何变量。[=]
: 按值捕获所有变量(不能修改外部变量)。[&]
: 按引用捕获所有变量(可以修改外部变量)。[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
};