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

问题描述

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...