
C++ Lambda表达式的运用
文章摘要
Deepseek-v3.2
在 C++ 中,
auto&&是一个转发引用(forwarding reference),它有两个主要作用:
1. 通用引用
auto&& 可以绑定到任何类型的值: - 左值 (lvalue)
- 右值 (rvalue) - const/非const
auto&& x1 = 42; // 绑定到右值 |
2. 在递归 lambda 中的特殊作用
在你的代码中:
auto solve = [&](auto&& self, i64 i, i64 j) -> i64 { |
这里的 auto&& self 允许: -
完美转发:保持参数的值类别(左值/右值) -
类型推导:自动推导出 lambda 自身的类型 -
避免拷贝:引用传递,不会产生额外的拷贝开销
3. 为什么需要两个 &
如果只用 auto&:
auto solve = [&](auto& self, i64 i, i64 j) -> i64 { |
如果只用 auto:
auto solve = [&](auto self, i64 i, i64 j) -> i64 { |
auto&& 结合了两种优点: - ✅ 无拷贝开销 - ✅
可以处理所有值类别 - ✅ 支持完美的类型推导
4. 简单理解
你可以把 auto&& self 理解为: >
“无论传入的是什么类型、什么值类别的参数,我都能正确处理”
这在递归 lambda 中特别有用,因为它需要精确地传递自身的类型来进行递归调用。
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自guangzhou_even
评论 ()















