当前位置: 首页 > news >正文

网站建设项目实践重庆市建设工程信息网官方网站

网站建设项目实践,重庆市建设工程信息网官方网站,wordpress 文章 打赏,好的网站建设技术C 折叠表达式(Fold Expression)是在 C17 引入的一种语法,用于简化与可变参数模板的操作。折叠表达式的作用是对参数包(parameter pack)进行递归处理。 折叠表达式有四种类型: 一元左折叠 (Unary Left Fol…

C++ 折叠表达式(Fold Expression)是在 C++17 引入的一种语法,用于简化与可变参数模板的操作。折叠表达式的作用是对参数包(parameter pack)进行递归处理。

折叠表达式有四种类型:

  • 一元左折叠 (Unary Left Fold):
(... op pack)

这会从左向右地将操作符 op 应用于参数包中的元素。

例子:

template<typename... Args>
auto sum(Args... args) {return (... + args);  // 左折叠:((arg1 + arg2) + arg3) + ...
}
  • 一元右折叠 (Unary Right Fold):
(pack op ...)

这会从右向左地将操作符 op 应用于参数包中的元素。

例子:

template<typename... Args>
auto sum(Args... args) {return (args + ...);  // 右折叠:arg1 + (arg2 + (arg3 + ...))
}
  • 二元左折叠 (Binary Left Fold):
(init op ... op pack)

在左折叠的基础上增加一个初始值 init。折叠从左至右,并将 init 作为第一个操作数。

例子:

template<typename... Args>
auto sum(Args... args) {return (0 + ... + args);  // 左折叠,初始值为 0
}
  • 二元右折叠 (Binary Right Fold):

这与二元右折叠类似,只不过 init 是最后一个操作数,折叠从右至左。

例子:

template<typename... Args>
auto sum(Args... args) {return (args + ... + 0);  // 右折叠,初始值为 0
}

常见的应用场景

  • 参数包的求和、乘积。
  • 参数包中元素的逻辑与/或操作。
  • 结合可变参数模板,简化递归调用的代码。

应用示例对比:

#include <iostream>#方法1 输出函数不定方法
template< typename Last >
void log(Last param) {std::cout << "Output last param:"<< param << std::endl;
}template< typename First, typename... Paramlist >
void log(First v, Paramlist... args) {std::cout << "Traversal param:"<< v << std::endl;log(args...);
}#方法2 输出函数不定方法template<typename T, typename... Ts>
auto printf3(T value, Ts... args) {std::cout <<"printf3:" << value << std::endl;(void) std::initializer_list<T> {//(... op pack)//这是一个lambda 表达式,通过 [] 捕获 args,并对每个 args 执行输出操作://value... 展开参数包,将 args... 中的每一个元素都以 lambda 表达式的形式传递,并展开执行。每个 args 被捕获到 lambda 中,展开后生成多个语句。相当于: //std::cout << args1 << std::endl;//std::cout << args2 << std::endl; ...([&args] { std::cout << "Paramlist list:"<<args << std::endl;}(), value) ......};
}
//方法3 输出不定参数
template<typename ... T>
auto sum(T ... t) {return (0 + ... + t);//(t + ...) 是左折,表达式会依次进行累加操作,像这样展开(((t1 + t2) + t3) + t4) + ... ,
// 这样即使参数包为空,也返回初始值 0}int main() {log("Hi", "test", 123, 1.1);printf3("first", "second", 3, 4.4);std::cout << sum(1, 2, 3, 4, 5.1) << std::endl;return 0;
}
~          

通过折叠表达式,可以避免手动展开参数包的递归调用,简化代码编写,提升可读性。

http://www.yayakq.cn/news/471813/

相关文章:

  • 市场部做网站工作职责网站换服务器对排名有影响吗
  • dw 做的网站能用吗河北沧为信息技术有限公司
  • 常德做网站专业公司哪家好软文关键词排名推广
  • 影楼网站模版网站 开发 成本
  • 网站建设多久可以建成成都网站制作实力乐云seo
  • 做网站需要花钱吗wordpress金融主题
  • 佛山市公司网站建设平台注册免费的网站有吗
  • 个人使用网站做百度推广 建自己的网站
  • 常德公交网站国外做油画的网站
  • 企业建设营销型网站有哪些步骤有没有专门做建筑造价的私单网站
  • 东莞网站建设企慕辽宁建设工程信息网地址
  • 仿卢松松博客wordpressseo 优化一般包括哪些内容
  • 江苏手机响应式网站建设小游戏网站开发
  • 杭州网站搭建商家免费入驻平台
  • 环球旅行社网站建设规划书论文网站外链如何建设
  • 温州网站建设咨询wordpress 媒体备份
  • 第一代网站建设技术凯里网站设计公司
  • 聊城做网站的公司价格建设监理有限责任公司网站
  • 一个网站项目多少钱erp系统有哪些功能模块
  • 邢台 建网站杭州网站开发设计
  • 企业网站源码百度网盘下载重庆建设工程信息网网
  • wordpress两个站点共用用户wordpress下划线 代码
  • 舞阳专业做网站硬件开发能力
  • 常平做网站广告公司服务方案
  • 怎么用自己主机做网站、工程外包平台
  • 网站发布服务托管器一个网站怎么做关键词搜索
  • 网站开发能怎么赚钱app开发公司上海
  • 中小企业网站查询网站素材图片
  • cn结尾的网站 做外贸如何搭建手机网站源码
  • 做通路富集分析的网站广州模板网站建设费用