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

自己的网站源代码一片空白做网站会犯法吗

自己的网站源代码一片空白,做网站会犯法吗,外贸通网站建设,rails开发的网站开发下面先区分一下两种“可变参数”机制,再重点讲讲 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/824270.html

相关文章:

  • 东莞网站推广运营公司2345网址大全浏览器
  • 上海浦东新区科技网站建设网站内部seo优化包括
  • 迅博威网站建设平台网站建设公司
  • 网站建设html代码优化网站检测工具
  • 做自己的购物网站做网站需要用什么语言
  • 湖南长沙门户网站濮阳新闻综合频道直播
  • 云南建设招标网站首页青创云网站建设
  • 营销策划与运营公司成都网站关键词推广优化
  • 凡网站创建wordpress上传html代码
  • 长沙网站开发推荐PS做任务的网站
  • 定远县可以做网站的地方网站含义
  • 前端的网站重构怎么做做网站的服务器用什么系统
  • 素材网站上的元素是怎么做的最好的做网站公司
  • 靖江市住房和城乡建设局的网站重庆广告公司前十名
  • 遵义做网站推广网站空间一定要买吗
  • 用模板做企业网站wordpress windows 10
  • 厦门建公司网站专业网站建设经费申请
  • 东莞网站改版国外二级域名免费申请
  • 北京网站建设备案代理网络营销推广目标
  • wordpress 客户端源码网络推广优化招聘
  • 医院门户网站模板下载洛阳做网站找哪家
  • 专业网站建设的公司网络建设上市公司排名
  • 稳定的常州网站推广廊坊中小企业网站制作
  • 网站管理后台密码忘记了那些视频网站能用来直接做href
  • 推荐个好看的网站图片制作软件带字
  • 贵州省文化旅游网站建设的必要性php网站开发心得
  • 东莞营销型网站建站wordpress 屏蔽ip
  • 鹤壁网站建设鹤壁建立网站后还要钱吗
  • 房地产网站推荐wordpress画廊怎么用
  • 网站建设兼职平台沈阳男科去哪里看比较好