讲师中心 微信公众号
AI工具推荐 视频效率加速

C++的Fold表达式是什么_C++17折叠表达式简化可变参数模板编程

陌晨君_8347

陌晨君_8347

发布时间:2025-12-20 16:04:02

|

283人浏览过

|

来源于php中文网

原创

折叠表达式是C++17引入的语法,用于简化可变参数模板中对参数包的操作。通过(pack op ...)实现右折叠,(... op pack)实现左折叠,还可结合初始值进行带初值折叠,如(pack op ... op init)和(init op ... op pack),支持+、*、&&等二元运算符,使求和、逻辑判断等操作更简洁直观。

c++的fold表达式是什么_c++17折叠表达式简化可变参数模板编程

C++17引入的折叠表达式(Fold Expressions)极大地简化了可变参数模板的编写,使得处理参数包变得直观且简洁。在C++17之前,处理可变参数模板通常需要递归展开,代码冗长且难以理解。折叠表达式通过一行代码就能对参数包中的每个元素执行某种操作,比如求和、逻辑判断、打印等。

什么是折叠表达式?

折叠表达式是一种专门用于可变参数模板中对参数包进行“折叠”操作的语法。它允许你使用一个二元运算符,将参数包中的所有元素“折叠”成一个单一值。语法形式如下:

( pack op ... ) // 右折叠
( ... op pack ) // 左折叠
( pack op ... op init ) // 带初始值的右折叠
( init op ... op pack ) // 带初始值的左折叠

其中 op 是任意二元操作符(如 +, *, &&, pack 是参数包,init 是初始值。

常见用法示例

折叠表达式适用于多种场景,以下是一些典型应用:

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

  • 数值求和:计算所有参数的总和
  • template <typename... Args>
    auto sum(Args... args) {
        return (args + ...);
    }
    // sum(1, 2, 3, 4) 返回 10
  • 逻辑与/或判断:检查所有条件是否为真
  • template <typename... Args>
    bool all_true(Args... args) {
        return (args && ...);
    }
    // all_true(true, true, false) 返回 false
  • 输出打印多个值:用流操作符依次输出
  • template <typename... Args>
    void print(Args const&... args) {
        (std::cout << ... << args) << '\n';
    }
    // print(1, "hello", 3.14); 输出: 1hello3.14

左折叠与右折叠的区别

虽然大多数情况下左右折叠结果一致(如加法满足结合律),但在不满足结合律的操作中会有差异。

C++
C++

"空空如也"

下载
  • 右折叠 (args + ...) 展开为:arg1 + (arg2 + (arg3 + ...))
  • 左折叠 (... + args) 展开为:((arg1 + arg2) + arg3) + ...

例如,在减法中:

// (1 - 2 - 3) 使用右折叠:1 - (2 - 3) = 1 - (-1) = 2
// 使用左折叠:((1 - 2) - 3) = (-1) - 3 = -4

因此需根据语义选择合适的折叠方向。

空参数包的处理

对于一元折叠表达式,当参数包为空时,某些操作有默认值:

  • && 折叠:空包结果为 true
  • || 折叠:空包结果为 false
  • +* 等算术操作:空包不合法,编译报错

若要支持空包,可使用带初始值的二元折叠:

template <typename... Args>
auto safe_sum(Args... args) {
    return (args + ... + 0); // 即使args为空,结果为0
}

基本上就这些。折叠表达式让可变参数模板从“难写难懂”变得简洁优雅,是C++17最实用的新特性之一。合理使用能大幅减少模板代码量,提升可读性和维护性。

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5704

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2304

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1572

2025.10.17

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

20

2026.09.21

NumPy随机数文件读写与dtype数据类型
NumPy随机数文件读写与dtype数据类型

本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

0

2026.09.21

NumPy矩阵运算与线性代数计算
NumPy矩阵运算与线性代数计算

本专题整理 NumPy 矩阵运算与线性代数计算相关教程,覆盖矩阵乘法、dot 与 @ 运算符、逆矩阵、行列式、特征值与特征向量、SVD、线性方程组、欧氏距离、矩阵分解和大规模矩阵性能优化等内容,帮助读者掌握 np.linalg 与矩阵计算实战。

0

2026.09.21

NumPy广播机制数学运算与统计分析
NumPy广播机制数学运算与统计分析

本专题整理 NumPy 广播机制、数组数学运算与统计分析相关教程,覆盖广播规则、维度对齐、矩阵与数组加减除法、向量化计算、均值方差、分位数、中位数、直方图和 unique 频次统计等场景,帮助读者掌握 ndarray 高效计算与统计处理方法。

0

2026.09.21

NumPy数组创建索引切片与数据选择
NumPy数组创建索引切片与数据选择

本专题整理 NumPy 数组创建、索引、切片与数据选择相关教程,覆盖 np.array、zeros/ones、多维数组形状、基础切片、花式索引、布尔索引、条件筛选、视图与副本等常用场景,帮助读者系统掌握 ndarray 数据构造与高效提取方法。

0

2026.09.21

Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

40

2026.09.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn