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

无锡网站排名哪里有seo的优化方案

无锡网站排名哪里有,seo的优化方案,有哪些网站可以做设计比赛,响应式网站建设定制下面先区分一下两种“可变参数”机制,再重点讲讲 C11 引入的可变模板参数(variadic templates)。 1. C 风格的可变参数(…) 不是的,va_list 本身并不是“可变参数”,而是 C 标准库(…

下面先区分一下两种“可变参数”机制,再重点讲讲 C++11 引入的可变模板参数(variadic templates)。


1. C 风格的可变参数(…)

不是的,va_list 本身并不是“可变参数”,而是 C 标准库(<stdarg.h>)提供的一个类型,用来在函数内部访问由 引入的可变参数列表。

具体来说:

  1. 可变参数函数的声明
    void foo(int fixed_arg,);
    
    这里的 (省略号)才是告诉编译器“这是个可变参数函数,可以接收不定个数的实参”。

举个最小例子:

#include <stdio.h>
#include <stdarg.h>void my_printf(const char *fmt,) {va_list ap;va_start(ap, fmt);vprintf(fmt, ap);   // 标准库 vprintf 就是接收 va_list 的版本va_end(ap);
}int main() {my_printf("x=%d, y=%.2f\n", 42, 3.14);return 0;
}
  • :声明可变参数
  • va_list ap;:申明一个遍历句柄
  • va_start(ap, fmt);:指向第 1 个可变参数
  • va_arg(ap, Type):依次读取
  • va_end(ap);:结束

总结:

  • “可变参数”是函数签名里的
  • va_list 是访问这些参数的工具类型。

缺点:

  • 不做类型检查,容易出错
  • 访问时需要 va_arg 按正确类型一一取出

2. C++11 可变模板参数(Variadic Templates)

2.1 基本语法

template<typename… Args>
void foo(Args… args) {// …
}
  • Args…:模板参数包(parameter pack)
  • args…:对应的函数形参包

你可以在函数体里用**展开(expansion)**把 args… 拆成一堆独立的参数。

2.2 递归展开(C++11/14)

演示一个打印所有参数的例子:

#include <iostream>// 终止版本
void print_all() {std::cout << "\n";
}// 递归版本
template<typename T, typename… Ts>
void print_all(T first, Ts… rest) {std::cout << first;if constexpr (sizeof(rest) > 0) {std::cout << ", ";print_all(rest…);  // 递归展开} else {std::cout << "\n";}
}int main() {print_all(1, "hello", 3.14, 'x');
}

思路:

  1. 至少拆出一个参数 first,剩下的仍是包 rest…
  2. 递归调用直到 rest… 为空

2.3 折叠表达式(Fold Expressions,C++17)

C++17 提供更简洁的“折叠表达式”来一次性展开参数包:

#include <iostream>template<typename… Ts>
void print_all(Ts const&… args) {// ( expr ⌄ ... ) 或 ( ... ⌄ expr ) 形式// 这里用逗号运算符,最后再输出换行((std::cout << args << ", "),);std::cout << "\n";
}int main() {print_all(1, "foo", 2.5, 'c');
}

常见折叠用法举例:

  • 求和: auto sum = (args + … + 0);
  • 逻辑与: auto all_ok = (args && …);
  • 输出: (std::cout << … << args);

2.4 完美转发

#include <utility>template<typename… Ts>
void logf(const char* fmt, Ts&&… args) {// 假设你有个 format_to_string(fmt, …) 函数std::string s = format_to_string(fmt, std::forward<Ts>(args));OutputDebugStringA(s.c_str());
}
  • Ts&&… args:参数包完美转发
  • std::forward<Ts>(args)…:保留左值/右值属性

3. 小结

  • C++ 的 <cstdarg>)是 C 时代遗留的,类型不安全
  • Variadic Templates(C++11 起)提供了类型安全编译期展开的可变参数
  • 配合递归、折叠表达式和完美转发,能写出既灵活又高效的通用 API。
http://www.dtcms.com/wzjs/378939.html

相关文章:

  • 镇江网站制作公司网页设计一般用什么软件
  • 网站选项卡代码百度上海总部
  • 关于建设饮食与健康网站的意义免费推广网站大全
  • 沂水建设局网站整合营销活动策划方案
  • wordpress live-calendar关键词优化营销
  • 用七牛做网站外贸网站seo优化
  • 深圳优化网站网络推广公司方案
  • wordpress微信设置seo怎么发布外链
  • 公司网站建设方案书业务推广方式
  • 做服装最好的网站百度一下首页网页
  • 佛山市城乡住房建设局网站网络营销概念是什么
  • java网站开发思维导图全球新闻最新消息
  • 云南网警在线报警郑州seo技术服务
  • flash 的网站宁波靠谱营销型网站建设
  • 平台推广方案设计思路青岛seo外包服务
  • 怎么建设一个公司网站交换神器
  • 厦门做企业网站张家港seo建站
  • 珠海网站建设培训学校百度竞价排名价格
  • 网站推广品牌网络域名
  • 做新闻网站数据南昌seo数据监控
  • 金华企业做网站百度seo软件优化
  • 徐州网站建设市场分析百度seo服务
  • 深圳罗湖商城网站建设线上运营推广
  • 做博客网站最好用什么系统视频号怎么付费推广
  • 建设营销型网站广州emlog友情链接代码
  • 做高档衣服的网站北京seo服务
  • 昆山网站建设nba最新交易一览表
  • 文山文山市网站建设搜索百度网页版
  • wordpress评论采集插件百度搜索引擎优化方案
  • 设计官方网站关键词app下载