网站搭建玩要多长时间wordpress博客程序文章自动更新
news/
2025/9/23 7:41:05/
文章来源:
网站搭建玩要多长时间,wordpress博客程序文章自动更新,网站运营主要是做什么,买毕业设计的网站变参数函数
变参数函数是接收可变数量参数的函数#xff08;例如 std::printf #xff09;。
为声明变参数函数#xff0c;要以省略号为最后的形参#xff0c;例如 int printf(const char* format, ...); 。语法上的额外细节、自动参数转换及替用项见变参数。
为从函数…变参数函数
变参数函数是接收可变数量参数的函数例如 std::printf 。
为声明变参数函数要以省略号为最后的形参例如 int printf(const char* format, ...); 。语法上的额外细节、自动参数转换及替用项见变参数。
为从函数体内访问可变参数标准库提供下列库设施 定义于头文件 cstdarg va_start 启用对可变函数实参的访问 (宏函数) va_arg 访问下一个可变函数实参 (宏函数) va_copy (C11) 制造可变函数实参的副本 (宏函数) va_end 结束对可变函数实参的遍历 (宏函数) va_list 保有 va_start、va_arg、va_end 和 va_copy 所需的信息 启用对可变函数实参的访问
va_start void va_start( std::va_list ap, parm_n );
va_start 宏允许访问后随具名参数 parm_n 的可变参数。
va_start 应当在任何对 va_arg 的调用前以到合法 std::va_list 对象 ap 的实例调用。
若 parm_n 声明为有引用类型或与来自默认参数提升的结果不兼容的类型则行为未定义。
参数
ap-std::va_list 类型的实例parm_n-首个可变参数前紧接的具名参数
展开值
无
注意
要求 va_start 支持带重载的 operator 的 parm_n 。 访问下一个可变函数实参
va_arg T va_arg( std::va_list ap, T );
va_arg 宏展开成对应来自 std::va_list ap 的下个参数的 T 类型表达式。
在调用 va_arg 前 ap 必须为到 va_start 或 va_copy 的调用所初始化中间不能夹带 va_end 的调用。 va_arg 宏的每次调用都修改 ap 令它指向下个可变参数。
若 ap 中的下个参数类型提升后与 T 不兼容则行为未定义除非
一个类型是有符号整数类型而另一类型是无符号整数类型且值能用两个类型表示或一个类型是指向 void 的指针而另一类型是指向字符类型 char 、 signed char 或 unsigned char 的指针。
若在 ap 中无更多参数时调用 va_arg 则行为未定义。
参数
ap-std::va_list 类型的实例T-ap 中下个参数的类型
展开值
ap 中的下个可变参数 制造可变函数实参的副本
va_copy void va_copy( std::va_list dest, std::va_list src ); (C11 起)
va_copy 宏复制 src 到 dest 。
va_end 应当在函数返回前或任何 dest 的后继重初始化通过对 va_start 或 va_copy 的调用前对 dest 调用。
参数
dest-要初始化的 std::va_list 类型实例src-将用于初始化 dest 的源 std::va_list
展开值
无 结束对可变函数实参的遍历
va_end void va_end( va_list ap );
va_end 宏进行对为 va_start 或 va_copy 所初始化的 ap 对象的清理。 va_end 可以修改 ap 并令它不再可用。
若无对应的对 va_start 或 va_copy 的调用或若 va_end 未在调用 va_start 或 va_copy 的函数返回前调用则行为未定义。
参数
ap-要清理的 va_list 类型实例
展开值
无 保有 va_start、va_arg、va_end 和 va_copy 所需的信
std::va_list
va_list 是适用于保有宏 va_start 、 va_arg 及 va_end 所需信息的完整对象类型。
若创建 va_list 实例并传递给另一函数且通过 va_arg 在该函数中使用则调用方函数的任何后继使用必须前附对 va_end 的调用。
传递指向 va_list 对象的指针给另一函数并在函数返回后使用该对象是合法的。 调用示例
#include iostream
#include cstdarg
#include cmath
#include typeinfostruct Cell
{int x;int y;
};std::ostream operator(std::ostream os, const Cell cell)
{os { cell.x , cell.y };return os;
}double sample_stddev(const int count, ...)
{double sum 0;std::va_list args1;va_start(args1, count);std::va_list args2;va_copy(args2, args1);for (int i 0; i count; i){double num va_arg(args1, double);sum num;}va_end(args1);double mean sum / count;double sum_sq_diff 0;for (int i 0; i count; i){double num va_arg(args2, double);sum_sq_diff (num - mean) * (num - mean);}va_end(args2);return std::sqrt(sum_sq_diff / count);
}void simple_printf(const char* fmt...)
{va_list args;va_start(args, fmt);while (*fmt ! \0){if (*fmt d){int i va_arg(args, int);std::cout typeid(i).name() : i std::endl;}else if (*fmt c){// 注意自动转换到整数类型int c va_arg(args, int);std::cout typeid(c).name() : static_castchar(c) std::endl;}else if (*fmt f){double d va_arg(args, double);std::cout typeid(d).name() : d std::endl;}fmt;}va_end(args);
}void Cell_printf(const int count, ...)
{std::va_list args1;va_start(args1, count);for (int i 0; i count; i){Cell cell va_arg(args1, Cell);std::cout typeid(cell).name() : cell std::endl;}va_end(args1);
}int main()
{simple_printf(dcff, 3, a, 1.999, 42.5);std::cout sample_stddev(4, 25.0, 27.3, 26.9, 25.7) std::endl;Cell_printf(3, Cell{101, 101}, Cell{102, 102}, Cell{103, 103});return 0;
}输出
i : 3
i : a
d : 1.999
d : 42.5
0.920258
4Cell : {101,101}
4Cell : {102,102}
4Cell : {103,103}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911804.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!