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 段。
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 段。