38 | 折叠表达式:高效的编译期展开
吴咏炜
该思维导图由 AI 生成,仅供参考
你好,我是吴咏炜。
当我在写第 18 讲“应用可变模板和 tuple 的编译期技巧”时,有朋友就建议可以讨论一下折叠表达式 [1]。不过,在那时候我对折叠表达式并没有什么实际应用经验,觉得它用处不大,于是就略过了。幸好我只是没有写,而没有乱加评论,否则就图欧图森破(too old, too simple)了。很多功能,只有在你真正需要到它、又掌握如何使用的时候,你才会觉得真正有用。很多 C++ 里看似用处不大的特性,都是这种情况(当然也不是所有,否则就不会有对特性的废弃和删除了)。
跟之前一样,我们还是通过具体的例子来看一下折叠表达式的作用和表达能力。
基本用法
一元折叠
而使用折叠表达式的话,我们可以把代码简化成下面这个样子:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
C++17引入了折叠表达式,这是一种高效的编译期展开技术,能够在编译期对参数包进行展开操作。本文首先介绍了折叠表达式的基本用法,包括一元折叠、与和或的折叠以及逗号的折叠,并通过具体的例子展示了其在编译期递归和参数求和等方面的应用。其次,详细讨论了一元左折叠和一元右折叠的展开规则,以及与和或运算符的短路规则对折叠表达式展开的影响。此外,介绍了二元折叠的概念及其在参数输出等场景中的应用。最后,提出了折叠表达式在空指针检查等实际应用场景中的优势,通过简洁的代码实现了对多个指针是否为空的检查。总的来说,折叠表达式作为一种编译期展开的功能,能够在保持代码简洁的同时实现复杂的参数包展开操作,为C++编程带来了更高效的编译期计算能力。文章还提供了一些具体的例子和代码实现,帮助读者更好地理解和应用折叠表达式。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《现代 C++ 编程实战》,新⼈⾸单¥59
《现代 C++ 编程实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- 孙新最近刷了两三遍的课,也逐渐了解了一些语法细节。但是因为现有的项目基本没有模板编程的部分,所以比较困惑。就是好的模板编程代码结构设计是什么样的,有什么优秀开源项目推荐的吗?
作者回复: 课程里我也展示了不少代码了。还是看看如何在项目里真正用起来吧。用起来才会有感觉。 标准库本身就是一个不错的参考。我觉得 Clang 的标准库 libc++ 可读性最好。
2022-06-132 - Milittle赞一个2022-06-05
收起评论