值捕获复制变量,lambda内部不受外部变化影响;引用捕获共享变量,可反映最新值但需注意生命周期。例如[a]复制a,[&b]引用b,修改外部b会影响lambda内结果,而a不会。基本类型推荐值捕获,大对象或需修改外部时用引用,避免悬空引用。

在C++11中,lambda表达式提供了一种简洁的方式来定义匿名函数对象。它广泛用于STL算法、回调函数等场景。其中,捕获列表(capture list)决定了lambda如何访问外部作用域中的变量,而“值捕获”和“引用捕获”的选择直接影响变量的行为和生命周期。
例如:
int a = 10;
auto f = [a]() {
std::cout << "a in lambda: " << a << std::endl;
};
a = 20;
f(); // 输出: a in lambda: 10
例如:
int b = 10;
auto g = [&b]() {
std::cout << "b in lambda: " << b << std::endl;
};
b = 30;
g(); // 输出: b in lambda: 30
以上就是C++11 lambda表达式与捕获值和引用区别的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号