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

网站建设规划书txt微盘电子商务网站建设与维护案例

网站建设规划书txt微盘,电子商务网站建设与维护案例,网站视觉元素,做ui设计师难吗文章目录 前言概念C 的可变参数参数列表 #va_list 4组宏 C 的可变参数参数列表 #va_list 4组宏初始化列表 initializer_list 类模板可变参数模板 总结参考资料作者的话 前言 C 和 C 可变参数介绍。 概念 可变#xff08;长#xff09;/不定#xff08;长#xff… 文章目录 前言概念C 的可变参数参数列表 #va_list 4组宏 C 的可变参数参数列表 #va_list 4组宏初始化列表 initializer_list 类模板可变参数模板 总结参考资料作者的话 前言 C 和 C 可变参数介绍。 概念 可变长/不定长参数函数可以接收任意数量的参数函数在声名和定义时不明确参数的数量 C 的可变参数 参数列表 #va_list 4组宏 头文件 stdarg.h 宏 #va_list类型宏参数列表#va_start()函数宏va_list 指向参数列表的第一个参数#va_arg()函数宏依据类型va_list 指向参数列表的下一个参数#va_end()函数宏清理 va_list 底层原理 #va_list字符指针#va_start()指针指向第一个元素#va_arg()指针指向下一个元素#va_end()指针置空 缺点 代码逻辑需要明确参数的数量和每个参数的类型… 代码示例 #include stdarg.h // #va_list、#va_start()、#va_arg()、#va_end() #include stdio.h// 形参的一般形式 // num参数数量 // ...参数列表 void print(int num, ...) {// 1. 定义 va_listva_list para_list; // 类型宏参数列表// 2. 初始化 va_listva_start(para_list, num); // 函数宏va_list 指向参数列表的第一个参数// 3. 遍历 va_listfor (int i 0; i num; i){printf(%d , va_arg(para_list, int)); // 函数宏依据类型va_list 指向参数列表的下一个参数}printf(\n);// 4. 清理 va_listva_end(para_list); // 函数宏清理 va_listreturn; }int main() {print(2, 0, 1);// 实参的一般形式// 2参数数量// 0 1参数列表print(3, 0, 1, 2);return 0; } // 输出 // 0 1 // 0 1 2C 的可变参数 参数列表 #va_list 4组宏 见 “C 的可变参数” 内容。 头文件 cstdarg 初始化列表 initializer_list 类模板 头文件 initializer_list 原理 类比容器 vector比容器轻量封装参数指向参数的指针、参数的数量和参数的类型等的包装器/对象 缺点 代码逻辑需要明确参数的类型一个 initializer_list 对象只支持一种类型可以使用多个 initializer_list 对象按序支持多种类型 按序如一个 initializer_listint 对象表示一部分参数都是 int 类型另一个 initializer_liststring 对象表示另一部分参数都是 string 类型不能是一个 initializer_listint 对象表示一部分参数既有 int 类型又有 string 类型 … 代码示例 // #include initializer_list // initializer_list #include iostreamusing std::cout; using std::endl; using std::initializer_list;void print(initializer_listint li) // 使用 initializer_list 对象接收可变参数 {for (const int l : li){cout l ;}cout endl;return; }int main() {print({0, 1}); // 使用列表初始化创建匿名 initializer_list 对象并作为参数print({0, 1, 2});return 0; } // 输出 // 0 1 // 0 1 2可变参数模板 相关语法 typename…定义模板参数包Args模板参数抽象概念 包的名称可自定义名称表示任意类型和数量的模板参数Args…模板参数包args具体参数具体概念 包的名称可自定义名称表示任意类型和数量的具体参数args…展开具体参数包sizeof…(具体参数包)获取具体参数包参数的数量…折叠表达式 折叠表达式的概念和语法较复杂 作者觉得很怪异在此不深入讲解。 可参见C模板编程折叠表达式、可变参表达式_c模板折叠-CSDN博客 解包方式 递归展开1递归展开2C 17支持逗号表达式展开1逗号表达式展开2优化逗号表达式3优化折叠表达式展开C 17支持 缺点 概念较复杂语法较复杂… 获取具体参数包参数的数量 #include iostreamusing std::cout; using std::endl;template typename... Args void print(Args... args) {cout sizeof...(args) endl;return; }int main() {print(0, c); // 2个不同类型的参数print(0, c, str); // 3个不同类型的参数return 0; } /* 输出 2 3逐行解释 2具体参数包参数的数量是2 3具体参数包参数的数量是3 */递归展开1 #include iostreamusing std::cout; using std::endl;// 参数数量 1的函数模板 // 递归终止时调用 template typename T void print(T value) {cout value endl; // 参数值return; }// 可变参数模板 // 参数数量 1的函数模板 // 递归时调用 template typename T, typename... Args void print(T value, Args... args) {cout value ; // 参数值print(args...); // 递归调用return; }int main() {print(0, c); // 2个不同类型的参数print(0, c, str); // 3个不同类型的参数return 0; } /* 输出 0 c 0 c str */递归展开2C 17支持 #include iostreamusing std::cout; using std::endl;// 可变参数模板 // 参数数量 1的函数模板 template typename T, typename... Args void print(T value, Args... args) {cout value ; // 参数值// 参数数量为0时无法递归调用print(args...);需要递归终止// C 17标准支持“if constexpr()”语法可以在编译而不是运行时求值以终止递归使得编译通过if constexpr (sizeof...(args) 0) // 递归调用{print(args...);}else // 递归终止{cout endl;}return; }int main() {print(0, c); // 2个不同类型的参数print(0, c, str); // 3个不同类型的参数return 0; } /* 输出 0 c 0 c str */逗号表达式展开1 #include iostream // #include initializer_list // initializer_listusing std::cout; using std::endl; using std::initializer_list;// 可变参数模板 // 参数数量 1的函数模板 template typename T, typename... Args void print(T value, Args... args) {cout value ; // 第一个参数值// 重点理解// [args]{cout args ;}Lambda 表达式// [args]{cout args ;}()调用 Lambda 表达式// value第一个参数的值// (,)逗号表达式先计算左表达式再计算右表达式结果是右表达式的值// ([args]{cout args ;}(), value)先调用 Lambda 表达式再计算第一个参数的值结果是第一个参数的值// args...展开具体参数包// ([args]{cout args ;}(), value)...展开具体参数包对每一个参数先调用 Lambda 表达式再计算第一个参数值结果是第一个参数值// typename T第一个参数的类型// initializer_list{}initializer_list 对象// initializer_listT{}匿名 initializer_list 对象值类型是第一个参数的类型// initializer_listT{([args]{cout args ;}(), value)...};第一个参数作为匿名 initializer_list 对象的值值类型是第一个参数的类型// C11 和 C14 标准没有提供一种直接将具体参数包展开到函数调用参数列表中的语法// 所以可以使用 initializer_list 结合 args... 展开具体参数包// 又因为 initializer_list 的值需要相同类型// 所以可以使用逗号表达式无论左表达式怎么计算都返回第一个参数的类型和值 T value// 所以函数模板需要定义 typename T函数需要定义 T valueinitializer_listT{([args]{ cout args ; }(),value)...};cout endl;return; }int main() {print(0, c); // 2个不同类型的参数print(0, c, str); // 3个不同类型的参数return 0; } /* 输出 0 c 0 c str */逗号表达式展开2优化 #include iostream // #include initializer_list // initializer_listusing std::cout; using std::endl; using std::initializer_list;// 可变参数模板 // 参数数量 1的函数模板 // 依据“逗号表达式展开1”的分析模板参数 typename T、初始化列表 initializer_list 的类型 T、第一个参数值 value 和逗号表达式的右表达式 value 有意义但无用途可以优化 template typename... Args void print(Args... args) {initializer_listint{([args]{ cout args ; }(),0)...};cout endl;return; }int main() {print(0, c); // 2个不同类型的参数print(0, c, str); // 3个不同类型的参数return 0; } /* 输出 0 c 0 c str */逗号表达式展开3优化 #include iostream #include vectorusing std::cout; using std::endl; using std::vector;// 可变参数模板 // 参数数量 1的函数模板 // 依据“逗号表达式展开1”的分析对于可以使用列表初始化 {} 的对象数组和向量 vector 等可以结合 args... 展开具体参数包 template typename... Args void print(Args... args) {int arr[]{([args]{ cout args ; }(),0)...};cout endl;vectorint{([args]{ cout args ; }(),0)...};cout endl;return; }int main() {print(0, c); // 2个不同类型的参数print(0, c, str); // 3个不同类型的参数return 0; } /* 输出 0 c 0 c 0 c str 0 c str */折叠表达式展开C 17支持 #include iostreamusing std::cout; using std::endl;// 可变参数模板 // 参数数量 1的函数模板 template typename... Args void print(Args... args) {// 二元左折叠表达式概念复杂// (,)逗号表达式连接折叠表达式和操作// 对每一个参数先输出参数再输出空格(..., (cout args ));cout endl; }int main() {print(0, c); // 2个不同类型的参数print(0, c, str); // 3个不同类型的参数return 0; } /* 输出 0 c 0 c str */总结 C 和 C 可变参数介绍。 参考资料 C 可变参数 | 菜鸟教程 (runoob.com)02_可变长参数的基础_哔哩哔哩_bilibiliva_list原理及用法-CSDN博客C 实现可变参数的三个方法 - Ofnoname - 博客园 (cnblogs.com)第 2 章 语言可用性的强化 现代 C 教程: 高速上手 C 11/14/17/20 - Modern C Tutorial: C 11/14/17/20 On the Fly (changkun.de)c11之函数参数包展开 - mohist - 博客园 (cnblogs.com)C模板编程折叠表达式、可变参表达式_c模板折叠-CSDN博客 作者的话 感谢参考资料的作者/博主作者夜悊版权所有转载请注明出处谢谢~如果文章对你有帮助请点个赞或加个粉丝吧你的支持就是作者的动力~文章在描述时有疑惑的地方请留言定会一一耐心讨论、解答文章在认识上有错误的地方, 敬请批评指正望读者们都能有所收获
http://www.w-s-a.com/news/263471/

相关文章:

  • 怎样做28网站代理中山网站建设方案外包
  • vs2010做网站前台搭建小网站
  • 做视频必须知道的一些网站wordpress 标签鼠标滑过_弹出的title 代码美化
  • 怎么做室内设计公司网站电商运营培训视频课程
  • 昆明网站策划天津市建筑信息平台
  • 三亚放心游app官方网站wordpress 个人主题
  • 做简单的网站备案平台新增网站
  • 中国建设网站银行网络营销推广方案整合
  • 网站域名列表dede网站白屏
  • 站长工具一区品牌建设卓有成效
  • 电子商务网站建设案例wordpress批量编辑
  • 想代理个网站建设平台100个最佳市场营销案例
  • 钟表东莞网站建设石家庄做网站时光
  • 织梦 图片网站源码成都建设工程安监局网站
  • 做兼职的网站策划书湖北省建设工程造价信息网
  • 企业网站网址长期做网站应该购买稳定的空间
  • 网站静态化设计html5手机网站制作
  • 深圳最简单的网站建设家居网站建设全网营销
  • 如何取消网站备案佛山网站优化公司
  • 网站开发 成都广水网站设计
  • 音乐网站建设目标合同管理系统
  • jq网站特效插件如何知道网站是否被k
  • 自己的网站怎么接广告网站搭建收费
  • 宁波大型网站制作建立一个网站 优帮云
  • 大连零基础网站建设教学电话有哪些比较好的做ppt好的网站
  • 哪个网站做logo设计我的建筑网
  • php电子商务网站开发沂源手机网站建设公司
  • html和php做网站哪个好3gcms企业手机网站整站源码asp
  • 网站建设网页设计案例云南建设厅网站删除
  • 杏坛网站制作太原做网站要多少钱呢