va_arg

来自cppreference.com
< cpp‎ | utility‎ | variadic

 
 
实用工具库
类型的支持 (basic types, RTTI, type traits)
动态内存管理
错误处理
程序实用工具
可变参数函数
日期和时间
函数对象
initializer_list(C++11)
bitset
hash(C++11)
关系运算符
原文:
Relational operators
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
rel_ops::operator!=
rel_ops::operator>
rel_ops::operator<=
rel_ops::operator>=
双和元组
原文:
Pairs and tuples
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
pair
tuple(C++11)
piecewise_construct_t(C++11)
piecewise_construct(C++11)
掉期,远期和移动
原文:
Swap, forward and move
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
swap
forward(C++11)
move(C++11)
move_if_noexcept(C++11)
declval(C++11)
 
 
在头文件 <cstdarg> 中定义
T va_arg(va_list ap, T);
va_arg宏扩展到对应到下一个参数的类型T表达va_listap.
原文:
The va_arg macro expands to an expression of type T that corresponds to the next parameter from the va_list ap.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
在此之前调用va_argap必须通过调用初始化为va_startva_copy,而没有中间调用va_end。每一次调用的va_arg宏修改ap指向下一个变量的参数.
原文:
Prior to calling va_arg, ap must be initialized by a call to either va_start or va_copy, with no intervening call to va_end. Each invocation of the va_arg macro modifies ap to point to the next variable argument.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
如果va_arg被调用时的参数有没有更多的ap,或与ap,如果T(促销)后的下一个参数的类型不兼容的行为是未定义的,除非:
原文:
If va_arg is called when there are no more arguments in ap, or if the type of the next argument in ap (after promotions) is not compatible with T, the behavior is undefined, unless:
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 一种类型是一个带符号的整数类型,另一种类型是对应的无符号整数类型,和的值是表示在这两种类型;或
    原文:
    one type is a signed integer type, the other type is the corresponding unsigned integer type, and the value is representable in both types; or
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 一种类型是指针void和其他字符类型是一个指针.
    原文:
    one type is pointer to void and the other is a pointer to a character type.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

目录

[编辑] 参数

ap -
va_list类型的一个实例
原文:
an instance of the va_list type
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
T -
中的下一参数ap的类型
原文:
the type of the next parameter in ap
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 扩展后的值

下一个变量参数ap
原文:
the next variable parameter in ap
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 为例

#include <iostream>
#include <cstdarg>
#include <cmath>
 
double stddev(int count, ...)
{
    double sum = 0;
    double sum_sq = 0;
    va_list args;
    va_start(args, count);
    for (int i = 0; i < count; ++i) {
        double num = va_arg(args, double);
        sum += num;
        sum_sq += num*num;
    }
    return std::sqrt(sum_sq/count - (sum/count)*(sum/count));
}
 
int main()
{
    std::cout << stddev(4, 25.0, 27.3, 26.9, 25.7) << '\n';
}

输出:

0.920258

[编辑] 另请参阅

带可变参数函数的参数可以访问
原文:
enables access to variadic function arguments
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

(函数宏) [edit]
(C++11)
makes a copy of the variadic function arguments
(函数宏) [edit]
结束遍历可变参数函数的参数
原文:
ends traversal of the variadic function arguments
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

(函数宏) [edit]