C++ 接收数量不定的函数参数
可以將函數定義成能夠接受任意數量的實參。通過將省略號(3個句點...)寫在函數定義中形參列表的最后,即可表示調用該函數時可以提供數量可變的實參。例如
int sumValues( ?int first, ... ?)
{ ?
// ?Code for the function
}
函數定義中至少有一個普通形參,也可以有多個。省略號必須放在形參列表的最后。
顯然定義中沒有關于可變列表中實參的類型或數量的任何信息,因此我們的函數代碼必須弄清自己被調用時接收的事什么。 ? C++庫在 stdarg.h 頭文件中定義了va_start、va_arg、va_end宏,可以幫助我們做這件事。
如下程序
#include<iostream>
#include<cstdarg>
using namespace std;
int sum( int count, ... )
{
if( count <= 0 )
return 0;
va_list arg_ptr; // Declare argument list pointer
va_start( arg_ptr , count ); // Set arg_ptr to 1st argument
int sum = 0;
for( int i=0; i<count; i++ )
sum += va_arg( arg_ptr, int ); // Add int value from arg_ptr and increment
va_end( arg_ptr ); ? // Reset the pointer to null
return sum;
}
int main( )
{
cout << sum( 6, 2, 4, 6, 8, 10, 12 ) <<endl;
cout << sum( 9, 11, 22, 33, 44, 55, 66, 77, 88, 99 );
system("pause");
return 0;
}
運行結果42
472
main()函數在兩條輸出語句中調用了sum( )函數,第一次6個實參、第二次9個實參 ,每種情況下的第一個實參都指定跟著的實參個數。
sum() 函數有一個int類型的普通參數,他表示后面跟著的實參的數量。形參表中的省略號表明可以傳遞任意數量的實參。有2種方法可以確定調用該函數時有多少實參:第一是像sum()函數一樣,用一個固定的形參指定實參的數量;第二是要求最后一個實參具有特殊的標記值,以便進行檢查和確認。
? ? ?接下來再對程序語句進行分析。
va_list arg_ptr; ? ? ?聲明一個va_list 類型的指針, va_list 類型在stdarg.h頭文件中定義的,該指針用來依次指向各個實參。
va_start( arg_ptr , count ); va_start 宏用來初始化arg_ptr,使其指向列表中第一個實參。
for( int i=0; i<count; i++ )
sum += va_arg( arg_ptr, int ); ? 宏 va_arg返回 arg_ptr指向的位置存儲的實參值,并使arg_ptr遞增,指向下一個實參值。 宏va_ptr的第二個實參是第 一個實參的類型,決定著我們得到的數值以及va_arg 遞增的方式。
va_end( arg_ptr ); 宏va_end 將傳遞給他的實參——va_list 類型的指針復位成空值
轉載于:https://www.cnblogs.com/ATMvip/archive/2012/11/05/2755752.html
總結
以上是生活随笔為你收集整理的C++ 接收数量不定的函数参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nhibernate3.3.3 GA使用
- 下一篇: 项目-团队-技术-个人(专业篇)