问题描述
va_list
可以处理C ++引用吗?我知道他们可以处理整数,双精度和指针,但不能处理浮点数,字符等。它们可以处理C ++引用吗?
解决方法
您应该#include <cstdarg>
而不是<stdarg.h>
...
如果调用者提供引用作为该函数的参数,则调用将以与直接指定引用对象相同的方式进行。例如,如果您有:
void f(...);
T my_t;
T& x = my_t;
f(my_t);
f(x);
在寄存器中和/或在堆栈中作为f
的参数传递的值在两个调用中都是相同的(假定是离线调用,如果是内联则在功能上等效)。
因此,“他们可以处理C ++引用吗?”-是的,如上所述,可能不是您想要/期望的。
请注意:如果您有...
f(A& b,...);
...行为未定义,因为va_start
宏不支持将最终的前...
匹配参数作为引用(您不能传递lambda捕获或打包扩展)。有关完整详细信息,请参见C ++ Standard [cstdarg.syn]第1段。