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

全网网站建设推广兄弟们给个能用的网站

全网网站建设推广,兄弟们给个能用的网站,阿里巴巴官网拍卖网,Wordpress 视频采集插件c 11 引入了可变参数模板,c 17 引入了折叠表达式,比 c 语言的可变参数更加简洁灵活。这篇博客总结了一些例子。 …(省略号)用于可变参数(Variadic Arguments),它可以放在模板参数 或 函数参数的…

c++ 11 引入了可变参数模板,c++ 17 引入了折叠表达式,比 c 语言的可变参数更加简洁灵活。这篇博客总结了一些例子。

  • …(省略号)用于可变参数(Variadic Arguments),它可以放在模板参数函数参数的后面,表示该参数是参数包(Parameter Pack),可以接收多个值。

1. 可变参数模板

递归调用是处理可变参数模板的经典方式,即通过递归地拆解参数包。

#include <iostream>// 基本函数(终止递归)
void print() {std::cout << "结束" << std::endl;
}// 可变参数模板
template <typename T, typename... Args> // 这个... 表示多种不同的变量类型
void print(T first, Args... rest) { // 这个... 表示多种不同的变量类型std::cout << first << " ";  // 先打印当前参数print(rest...);             // 递归调用,传入剩余参数, 这个... 表示多种不同的传入参数
}int main() {print(1, 2.5, "Hello", 'A');  // 输出: 1 2.5 Hello A 结束
}
  • 需要有递归的终止函数,比折叠表达式麻烦点

  • 可变参数模板不仅可以用于函数,还可以用于 类模板。

#include <iostream>// 可变参数类模板
template <typename... Args>
class MyClass {
public:MyClass() {std::cout << "MyClass with " << sizeof...(Args) << " template parameters\n";}
};int main() {MyClass<int, double, char> obj1;  // 输出: MyClass with 3 template parametersMyClass<> obj2;                   // 输出: MyClass with 0 template parameters
}
  • sizeof…(Args) 为一种特殊的语法,用来 获取模板参数包中的参数个数。

2. 折叠表达式

C++17 引入了 折叠表达式(Fold Expressions),可以将参数包展开,并应用一个二元操作符来对这些参数进行“折叠”,将它们合并成一个单一的值。

折叠表达式有两种基本形式:

  • 左折叠(left fold), 操作从 最左侧 开始,依次将参数包中的元素与左侧的结果结合,语法:
(... op args)
  • 右折叠(right fold),操作从 最右侧 开始,依次将参数包中的元素与右侧的结果结合,语法:
(op args ...)

其中,op 表示运算符,可以是 +, -, *, /, &&, ||, << 等。可以看出,省略号在运算符左边就是左折叠,在运算符右边就是右折叠。

#include <iostream>template <typename... Args> auto subtractLeft(Args... args) {return (... - args); // 左折叠,依次进行减法
}template <typename... Args> auto subtractRight(Args... args) {return (args - ...); // 右折叠,依次进行减法
}int main() {std::cout << subtractLeft(10, 3, 2, 1) << std::endl; // 输出是 4std::cout << subtractRight(10, 3, 2, 1) << std::endl; // 输出是 8return 0;
}

第一个函数左折叠表示 10-3-2-1=4,第二个函数右折叠表示 10-(3-(2-1))=8.

  • 可以直接对可变参数包进行操作,避免递归展开。
#include <iostream>// 使用 C++17 折叠表达式
template <typename... Args>
void print(Args... args) {((std::cout << args << " "), ...);std::cout << std::endl;
}int main() {print(1, 2.5, "Hello", 'A');// 输出: 1 2.5 Hello A
}

对所有参数包求和:

#include <iostream>template <typename... Args>
auto sum(Args... args) {return (args + ...); // 左折叠,将所有参数求和
}int main() {std::cout << sum(1, 2, 3, 4) << std::endl; // 输出: 10
}

文章转载自:

http://DhyNtZFr.ztdLp.cn
http://cfC7EJbt.ztdLp.cn
http://F5smyAKv.ztdLp.cn
http://zuMTjDv3.ztdLp.cn
http://LqToMXJb.ztdLp.cn
http://CLd9MvYB.ztdLp.cn
http://FxchL4ob.ztdLp.cn
http://jpGKS80Z.ztdLp.cn
http://2b5fU70I.ztdLp.cn
http://PPJn5OjH.ztdLp.cn
http://noaS0F6m.ztdLp.cn
http://AGIlReYo.ztdLp.cn
http://aPxJp8iK.ztdLp.cn
http://cD1SI92J.ztdLp.cn
http://PWzTmbgC.ztdLp.cn
http://PAzoFaIb.ztdLp.cn
http://m6sOdP5A.ztdLp.cn
http://t1wgzQwy.ztdLp.cn
http://VnItsyFA.ztdLp.cn
http://LDKptFyV.ztdLp.cn
http://UryEAtG5.ztdLp.cn
http://prweczTP.ztdLp.cn
http://WM68KoOc.ztdLp.cn
http://uwZkL8be.ztdLp.cn
http://FVn7kJDB.ztdLp.cn
http://l7EAlG5Y.ztdLp.cn
http://GJ1SKNCl.ztdLp.cn
http://6PlLMHJ8.ztdLp.cn
http://A0GveTzY.ztdLp.cn
http://1ipIYHd9.ztdLp.cn
http://www.dtcms.com/wzjs/736092.html

相关文章:

  • 建设网站的重点与难点在于icp备案有效期几年
  • 网站站长统计怎么弄android软件开发实例
  • 唐山网站建设正规公司建模培训多少钱
  • 帮别人做网站的公司网站开发及代运营
  • 上海市网站建设加盟微官网和微网站有什么区别
  • 麻城网站开发许昌seo推荐
  • 揭东建设局网站搭建网站
  • 机械设计软件solidworks镇江关键词优化如何
  • 网站制作 公开课网站 前台 设计要求
  • 建设优惠券网站搜索推广渠道
  • 网站服务器排名前十vuejs 可做网站吗
  • 程序员做网站如何赚钱网站商城
  • 网站建设与管理案例教程第三版答案云南网站建设优化企业
  • 网站建设与维护很累吗wordpress菜单分类目录
  • 网站风格设定校园门户网站建设实施方案
  • 莆田外贸建站广州网络推广万企在线
  • 自建网站成都权威的手机网站制作
  • 亚马逊网站网址app开发技术路线
  • 六安做网站的公司网站微信二维码悬浮
  • 网站越来越难做中山建设监理有限公司 网站
  • 个人网站制作流程青岛网站建设运营推广
  • 一个人做网站要多久网站可以做软著吗
  • 建站程序下载西地那非的作用与功效
  • 安联建设集团股份公司网站上海 建筑
  • lnmp wordpress网站长春网站制作可选吉网传媒好
  • 一个旅游网站建设需求分析办个公司需要多少钱
  • 教育门户网站系统建设方案免费微网站哪个好用
  • 站长工具域名查询社区网站建设报价单ppt
  • 代做网站名称优化个人做论坛网站有哪些
  • 常州做网站推广小波app推广网