在C++中,Lambda表达式的初始化捕获(C++14引入)允许在捕获列表中直接初始化变量。虽然结构化绑定(C++17)本身不直接支持在捕获列表中使用,但可以通过初始化捕获结合值/引用捕获的方式模拟类似效果。以下是具体实现方法:
通过=
或&
在捕获列表中初始化变量:
cppint a = 10, b = 20;
auto lambda1 = [a, b] { return a + b; }; // 按值捕获a和b [2,5](@ref)
auto lambda2 = [&a, &b] { return a + b; }; // 按引用捕获a和b [2,5](@ref)
结合mutable
关键字修改捕获的副本:
cppint x = 5;
auto lambda = [x] mutable { x += 10; return x; }; // 按值捕获并修改副本 [2,6](@ref)
若需解包复杂类型(如元组),需手动解包:
cppauto [x, y] = std::make_tuple(1, 2); // C++17结构化绑定
auto lambda = [x, y] { return x * y; }; // 按值捕获解包后的变量 [5,6](@ref)
C++14允许在捕获列表中直接初始化变量:
cppint a = 10;
auto lambda = [value = a] { return value * 2; }; // 初始化捕获a的副本 [2,5](@ref)
领取专属 10元无门槛券
手把手带您无忧上云