首页 > 后端开发 > C++ > 正文

C++ lambda 表达式与闭包:何时使用每个表达式的最佳实践?

PHPz
发布: 2024-08-28 12:30:04
原创
728人浏览过

lambda vs. 闭包:lambda 表达式:匿名函数,可捕获局部变量。闭包:函数或 lambda 表达式,可以访问创建它的作用域变量,即使该作用域已结束。何时使用:lambda 表达式:简单匿名函数。闭包:捕获局部变量并保持其状态。实战案例:计时器函数:使用 lambda 表达式或闭包作为回调函数。文件读取器:使用 lambda 表达式或闭包封装文件读取逻辑。

C++ lambda 表达式与闭包:何时使用每个表达式的最佳实践?

C++ Lambda 表达式与闭包:最佳实践与实战案例

Lambda 表达式

Lambda 表达式是一种轻量级的匿名函数,可以用作函数指针或对象。它们语法简洁,可以捕获局部变量,从而轻松实现闭包。

优点:

达芬奇
达芬奇

达芬奇——你的AI创作大师

达芬奇 50
查看详情 达芬奇
  • 代码简洁
  • 易于使用
  • 可以捕获局部变量

示例:

立即学习C++免费学习笔记(深入)”;

auto add = [](int a, int b) { return a + b; };

int sum = add(1, 2); // sum 为 3
登录后复制

闭包

闭包是一种函数或 lambda 表达式,它可以访问创建它的函数作用域内的变量,即使该作用域已被离开。闭包就像一个小型的代码段,封装了数据和函数。

优点:

  • 允许函数在结束作用域后仍能访问变量
  • 可以用于实现状态保存或延迟求值

示例:

立即学习C++免费学习笔记(深入)”;

int x = 10;
auto makeCounter = [x]() { return ++x; };

int counter1 = makeCounter(); // counter1 为 11
int counter2 = makeCounter(); // counter2 为 12
登录后复制

何时使用 lambda 表达式 vs. 闭包

一般来说,如果需要一个简单的匿名函数,则使用 lambda 表达式。如果需要捕获局部变量并保持其状态,则使用闭包。

实战案例

计时器函数:

void setupTimer(int interval, std::function<void()> callback) {
  // ... 设置计时器逻辑 ...
  callback();
}

// 使用 lambda 表达式
setupTimer(1000, []() { std::cout << "Timer fired" << std::endl; });

// 使用闭包
int count = 0;
setupTimer(1000, [&count]() { std::cout << "Timer fired: " << ++count << std::endl; });
登录后复制

文件读取器:

std::string readFile(const std::string& filename) {
  // ... 读取文件逻辑 ...
  return fileContents;
}

// 使用 lambda 表达式
auto fileContents = readFile("myfile.txt");

// 使用闭包
std::ifstream ifs;
auto readFileWithIfstream = [&ifs](const std::string& filename) {
  // ... 读取文件到 ifs ...
  return ifs.str();
};
ifs.open("myfile.txt");
auto fileContents = readFileWithIfstream("myfile.txt");
登录后复制

以上就是C++ lambda 表达式与闭包:何时使用每个表达式的最佳实践?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号