使用 C 级变量参数时:
void example( size_t length, ... )
{
va_list list;
T x;
va_start( list, length );
//...
x = va_arg( list, T );
//...
va_end( list );
}
某些类型在通过“ ...
”时会发生变化。例如,afloat
变成了double
。如果T
是这种类型,我应该将原始类型或损坏的类型放入va_arg
?
如果 C 和 C++ 和/或标准版本的答案不同,请指出。
(快速浏览一下这里表明应该使用 mangled 类型。我希望不会,因为这已经被破坏了,因为它需要用户计算类型,如果原始类型在类型别名后面,这会很痛苦,尤其是别名没有通用的原件,比如size_t
。希望我的帖子的标题更易于搜索。)
(经过更多思考,我意识到目标变量必须使用重整类型声明。因此va_arg
,如果为真,使用重整类型 in 没有我想象的那么愚蠢。我auto
有时会被 C++11 宠坏。)