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

苏州精品网站建设商丘房产网

苏州精品网站建设,商丘房产网,北京制作小程序,网站建设分金手指排名二九文章目录 C语言的可变函数参数遍历va_list逐个取出参数 C可变模板参数递归展开模板参数包示例代码逗号表达式展开参数包 总结 C11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板#xff0c;相比C98/03#xff0c;类模版和函数模版中只能含固定数量的模… 文章目录 C语言的可变函数参数遍历va_list逐个取出参数 C可变模板参数递归展开模板参数包示例代码逗号表达式展开参数包 总结 C11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板相比C98/03类模版和函数模版中只能含固定数量的模版参数。 C语言的可变函数参数和C的可变参数模板有相似之处 C语言的可变函数参数 C语言中可变函数参数是通过stdarg.h头文件中的宏和函数来实现的。标准库中的printf、scanf就是用可变函数参数的原理实现的。 va_list: 定义一个变量用于存储可变参数的信息。va_start(va_list ap, last_arg): 初始化va_list使其指向可变参数列表中的第一个参数。va_arg(va_list ap, type): 获取可变参数列表中的下一个参数的值同时将va_list指向下一个参数。va_end(va_list ap): 清理va_list使其无效。 遍历va_list逐个取出参数 #include stdarg.h #include stdio.hint sum(int count, ...) {int result 0;va_list args;va_start(args, count);for (int i 0; i count; i) {result va_arg(args, int);}va_end(args);return result; }int main() {int total sum(3, 10, 20, 30);printf(Sum: %d\n, total);return 0; }C可变模板参数 C中可变模板参数是通过模板参数包来实现的。 Args是一个模板参数包而args是一个函数形参参数包。声明一个参数包Args ...args这个参数包中可以包含0到任意个模板参数。使用sizeof...(Args)可以 获取模板参数包中的参数数量。 下面是一个简单的可变参数的函数模板 template class ...Args void ShowList(Args... args) {}上面的参数args前面有省略号所以它就是一个可变模版参数我们把带省略号的参数称为“参数 包”它里面包含了0到NN0个模版参数。我们无法直接获取参数包args中的每个参数的 只能通过展开参数包的方式来获取参数包中的每个参数这是使用可变模版参数的一个主要特 点也是最大的难点即如何展开可变模版参数。由于语法不支持使用args[i]这样方式获取可变 参数所以我们的用一些奇招来一一获取参数包的值。 递归展开模板参数包示例代码 利用递归展开模板参数包可以在编译时处理不同数量的参数。 #include iostream// 递归展开模板参数包 // 递归终止函数 templatetypename T void print(T value) {std::cout value std::endl; }// 展开函数 templatetypename T, typename... Args void print(T first, Args... args) {std::cout first , ;print(args...); }int main() {print(1, 2.5, Hello, a);return 0; }逗号表达式展开参数包 如果参数包中各个参数的类型都是整型那么也可以把这个参数包放到列表当中初始化这个整型数组此时参数包中参数就放到数组中了 //展开函数 templateclass ...Args void ShowList(Args... args) {int arr[] { args... }; //列表初始化//打印参数包中的各个参数for (auto e : arr){cout e ;}cout endl; }int main() {ShowList(1, 2, 3, 4); //正确ShowList(hello, 1, world, 2); //错误数组arr只能存放相同类型元素intShowList(); //错误不能分配大小为0的数组return 0; }虽然我们不能用不同类型的参数去初始化一个整型数组但我们可以借助逗号表达式。 逗号表达式会从左到右依次计算各个表达式并且将最后一个表达式的值作为返回值进行返回。将逗号表达式的最后一个表达式设置为一个整型值确保逗号表达式返回的是一个整型值。将处理参数包中参数的动作封装成一个函数将该函数的调用作为逗号表达式的第一个表达式。{(printarg(args), 0)...}将会展开成{(printarg(arg1),0),(printarg(arg2),0), (printarg(arg3),0), etc... }。这样一来在执行逗号表达式时就会先调用处理函数处理对应的参数然后再将逗号表达式中的最后一个整型值作为返回值来初始化整型数组。 比如 //支持无参调用 void ShowList() {cout endl; } //处理函数 templateclass T void PrintArg(const T t) {cout t ; } //展开函数 templateclass ...Args void ShowList(Args... args) {int arr[] { (PrintArg(args), 0)... }; //列表初始化逗号表达式cout endl; }总结 C语言使用stdarg.h来实现可变函数参数通过va_list、va_start、va_arg和va_end宏进行操作。C使用模板参数包来实现可变模板参数可以利用递归、逗号表达式展开参数包处理不同数量的参数。
http://www.pierceye.com/news/360093/

相关文章:

  • 个人网站用什么服务器宁波网站建设制作哪家好
  • 视频模板网站企业所得税优惠政策2022年
  • 坪山附近公司做网站建设哪家效益快wordpress 置顶 插件
  • 品牌网站建设服务机构内容网站管理系统
  • 电商网站建设基础ppt个人简单网站页
  • 移动端网站模板专业建站工作室
  • 企业网站建设的重要性及意义建设银行忘记密码网站首页
  • 易雅达网站建设公司广告设计公司设计收费标准
  • 行业门户网站php网站开发程序
  • 广州微信网站建设报价表上海注销营业执照流程
  • 陕西省建设执业资格注册中心网站科技有限公司 翻译
  • 做推广都有哪些网站网站怎么上传源码
  • discuz门户网站模板手机电子商务网站规划书范文
  • vps能同时做网站同时做其它事吗wordpress 支持小工具
  • 网站建设制作网络公司wordpress 汽车模板
  • 有哪些做外贸的网站网站快速搭建平台
  • wordpress搜索代码制做优化精灵
  • 连云港做网站推广东莞seo
  • 专业网站设计公司和普通设计公司的区别微信分销网站建设
  • 青海个人旅游网站建设网站建设教程软件下载
  • 做AMC12的题的网站龙华网站建设专业公司
  • 莱州网站制作友情链接交换形式
  • 如何编写网站做美食类网站现状
  • 一站式推广平台做家装模型的效果图网站
  • 企业电子商务网站开发实验报告苏州建筑设计公司排名
  • 网站的优化与网站建设有关吗网站先做移动站在做pc站可行吗
  • 河北网站制作公司电话建设网站的情况说明
  • 高校网站平台建设wordpress小工具不见了
  • 网站建设 会计处理北京垡头网站建设公司
  • 唐山网站制作案例网站建设中标