stdarg.h 中的 va_lists 可以处理 C++ 引用吗?

Can va_lists in stdarg.h handle C++ references?

va_list可以处理 C++ 引用吗?我知道他们可以处理整数、双精度数和指针,但不能处理浮点数、字符等。他们可以处理 C++ 引用吗?

你应该 #include <cstdarg> 而不是 <stdarg.h>...

如果调用者提供引用作为此类函数的参数,则调用的工作方式与直接指定引用对象的方式相同。例如,如果您有:

void f(...);
T my_t;
T& x = my_t;
f(my_t);
f(x);

在堆栈上的寄存器 and/or 中作为参数传递给 f 的值在两个调用中将相同(假设 out-of 行调用,如果内联则功能等效)。

所以,“他们能处理 C++ 引用吗”- 是的,按照上面描述的方式,这可能是也可能不是你 wanted/expected。


请注意:如果您有...

f(A& b, ...);

...行为未定义,因为 va_start 宏不支持将最终的预 ... 匹配参数作为引用(您不能传递 lambda 捕获也不打包扩展)。有关完整详细信息,请参阅 C++ 标准 [cstdarg.syn] 第 1 段。