不定長度引數

在定義函式時,有時我們並無法事先得知要傳遞的參數個數,例如printf(),這時可以使用不定長度引數,使用時必須含入cstdarg表頭檔。

不定長度引數使用幾個識別字來建立不定長度引數:
va_list:一個特殊型態,當作va_start、va_arg與va_end的參數使用。
va_start:啟始不定長度引數。
va_arg:讀取不定長度引數,並指定為何種資料型態。
va_end:終止不定長度引數

宣告不定長度引數時,在參數使用 … 表示將使用不定長度引數,實際呼叫時,必須告知將傳遞幾個不定長度引數,以下為示範程式碼。

#include<iostream>
#include<cstdarg>
using namespace std; 

void foo(int, ...); 

int main() { 
    double x = 1.0;
    double y = 2.0; 
    double a = 0.1;
    double b = 0.2;

    foo(2, x, y); 
    foo(4, x, y, a, b); 
    system("PAUSE");
    return 0; 
} 

void foo(int i, ...) { 
    va_list num_list; 
    va_start(num_list, i); 
    for(int j=0; j < i; j++){
        cout << va_arg(num_list, double) << endl; 
    }
    va_end(num_list); 
    cout << '\n';
}