C++ 如何正确地结束? #包括 使用名称空间std; void do_something(va_列表编号、整数计数){ // ^ //我应该在这里引用它吗?我是说,va_列表和数字? //…东西 va_端(数字); } 无效集合列表(整数计数,…){ va_列表编号; va_开始(数字、计数); 做点什么(数字、计数); } int main(){ 集合列表(2,0,1); 返回0; }
将C++ 如何正确地结束? #包括 使用名称空间std; void do_something(va_列表编号、整数计数){ // ^ //我应该在这里引用它吗?我是说,va_列表和数字? //…东西 va_端(数字); } 无效集合列表(整数计数,…){ va_列表编号; va_开始(数字、计数); 做点什么(数字、计数); } int main(){ 集合列表(2,0,1); 返回0; },c++,variadic-functions,C++,Variadic Functions,将va_list传递给另一个函数时,我应该如何将其传递给该函数?我知道在处理va_list时必须调用va_end,我不知道是否应该通过引用来调用它。va_list是否会正确结束,即使它不是通过引用调用的 我更喜欢在调用va_start或va_copy的相同函数中调用va_end,就像其他任何资源分配/解除分配对一样。标准要求这种风格,尽管有些实现更为宽容 通常,va_列表按值传递。它们是小物体 变量参数列表: #include <cstdarg> using namespace st
va_list
传递给另一个函数时,我应该如何将其传递给该函数?我知道在处理va_list
时必须调用va_end
,我不知道是否应该通过引用来调用它。va_list
是否会正确结束,即使它不是通过引用调用的 我更喜欢在调用va_start或va_copy的相同函数中调用va_end,就像其他任何资源分配/解除分配对一样。标准要求这种风格,尽管有些实现更为宽容
通常,va_列表按值传递。它们是小物体 变量参数列表:
#include <cstdarg>
using namespace std;
void do_something( va_list numbers, int count ) {
// ^
// Should I call this by reference here? I mean, va_list & numbers?
//... stuff
va_end( numbers );
}
void setList( int count, ... ) {
va_list numbers;
va_start( numbers, count );
do_something( numbers, count );
}
int main() {
setList( 2, 0, 1 );
return 0;
}
在以va_列表
为参数的函数中,绝对不能使用va_end
从va_arg
的(Linux)手册页:
va_start()的每次调用都必须由相应的
在相同函数中调用va_end()
(强调矿山)
在具有va_list
参数的函数中,按值获取va_list
(与vprintf
等C库函数一样,…也是如此)
示例:
#include <cstdarg>
using namespace std;
void do_something( va_list numbers, int count ) {
// ^
// Should I call this by reference here? I mean, va_list & numbers?
//... stuff
va_end( numbers );
}
void setList( int count, ... ) {
va_list numbers;
va_start( numbers, count );
do_something( numbers, count );
}
int main() {
setList( 2, 0, 1 );
return 0;
}
#包括
#包括
无效v_显示_整数(整数计数,va_列表ap){
而(0<计数--){
int i=va_arg(ap,int);
std::cout宏函数va_end
实现为void语句或重置va_列表
变量
理论上,你可以在任何地方调用它,甚至可以跳过它。然而,要成为一名优秀的程序员,我们需要将它放在va_
函数之后,以帮助记住这一点,你可以想象va_start
可能malloc
一些空间,而va_end
可能免费it@M.M:除了,malloc
和 free
可以(并且经常会)在不同的函数中调用。