Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何正确地结束? #包括 使用名称空间std; void do_something(va_列表编号、整数计数){ // ^ //我应该在这里引用它吗?我是说,va_列表和数字? //…东西 va_端(数字); } 无效集合列表(整数计数,…){ va_列表编号; va_开始(数字、计数); 做点什么(数字、计数); } int main(){ 集合列表(2,0,1); 返回0; }_C++_Variadic Functions - Fatal编程技术网

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
可以(并且经常会)在不同的函数中调用。