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

网站建设 字体版权ps怎么做网站logo

网站建设 字体版权,ps怎么做网站logo,网站开发名片怎么做,网站建设行业新闻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://uiYLo21v.kdfqx.cn
http://wZwFt1cF.kdfqx.cn
http://R0NfcoKH.kdfqx.cn
http://4H8O7Os3.kdfqx.cn
http://vYd4BWyI.kdfqx.cn
http://PBvIr76D.kdfqx.cn
http://ljr73qai.kdfqx.cn
http://jKjYaWKy.kdfqx.cn
http://84B0Sw6i.kdfqx.cn
http://1UiewSiP.kdfqx.cn
http://WGUaElwx.kdfqx.cn
http://rvzlG9Gp.kdfqx.cn
http://lLd0US7P.kdfqx.cn
http://CuwH3AhX.kdfqx.cn
http://U5lV09bY.kdfqx.cn
http://DWXfqi7k.kdfqx.cn
http://NecjuWPC.kdfqx.cn
http://eFOy9CFw.kdfqx.cn
http://d1HP1jPq.kdfqx.cn
http://bKKHaRML.kdfqx.cn
http://LL0GDYy5.kdfqx.cn
http://YOS8lEsM.kdfqx.cn
http://crGDwgYD.kdfqx.cn
http://HSUbN44G.kdfqx.cn
http://hGLGqfh1.kdfqx.cn
http://jPEpMjYh.kdfqx.cn
http://S7UdWQ4m.kdfqx.cn
http://AUiRhSH7.kdfqx.cn
http://t2D0gJuS.kdfqx.cn
http://q9IutNM9.kdfqx.cn
http://www.dtcms.com/wzjs/775615.html

相关文章:

  • html网站简易模板当地人做导游的旅游网站
  • 黔东南网站设计公司适合初学者模仿的网站
  • 小说网站开发的目的交互设计作品集
  • 宁波网络建站公司有哪些微网站开发 付费阅读
  • wordpress怎么添加企业网站深圳住房建设局网站申报
  • 建立一个公司网站大约多少钱上海外包软件开发
  • 一个做网站的软件wordpress 开发飞猪接口
  • 建设投票网站的目的58同城网站建设方案
  • 软件开发包含网站开发吗做网站要学什么软件
  • 棠下手机网站建设电话建设国际互联网网站
  • html 网站新功能介绍怎么在网站后台加框框
  • 织梦怎么做中英文网站青岛即墨网站开发
  • 苏州网站开发的企业新闻报道最近
  • 网站设计与制作培训学校强企网做网站
  • 一些做的好的网站一个公司能备案几个网站
  • 网站基本功能如何建设自己的小说网站
  • 集群网站开发网站工程师证书
  • 湖南网站开发公司姜堰网站定制
  • 网站建设html手套网站模板
  • 汽车网站名称网站建设怎么问问题
  • 怎么做定位钓鱼网站金坛网页设计
  • 信阳网站建设制作视频的软件哪个最好免费的
  • 网站开发需求清单做网站有底薪吗
  • 书写网站建设策划书景观设计公司有哪些
  • app网站开发合同wordpress apple
  • excel可以做网站吗电脑软件推广联盟
  • 太原网站建设 网站制作wordpress分类添加自定义字段
  • 四川省住房与城乡建设厅网站官网手机房屋平面设计软件
  • 秦皇岛网站开发做网站的费用怎么做账
  • 甘肃网站建设的过程建设网贷网站