C++ 速查手冊 V1.00 - 單元 8.5 - 可變參數




函數的參數數量也可以不固定,這是在參數列裡利用 ... 構成可變參數 (variadic arguments) ,舉例如下


001 #include <iostream>
002 #include <cstdarg>
003
004 int sum(int n_args, ...) {
005    va_list ap;
006    va_start(ap, n_args);
007    int sum = va_arg(ap, int);
008    for (int i = 2; i <= n_args; i++) {
009        sum += va_arg(ap, int);
010    }
011    va_end(ap);
012
013    return sum;
014 }
015
016 int main() {
017    std::cout << sum(3, 11, 22, 33)
018              << std::endl;
019    std::cout << sum(3, 19, 20, 21)
020              << std::endl;
021    std::cout << sum(3, 3, 65, 101)
022              << std::endl;
023
024    return 0;
025 }
026
027 /* Kaiching Chang 
028    u0805.cpp
029    2014-02 */

此例的 sum() 用來計算參數的總和,除了第一個參數 n_args 為計算總和的數量之外,其他的參數都會被累加起來,結果回傳為整數


004 int sum(int n_args, ...) {
005    va_list ap;
006    va_start(ap, n_args);
007    int sum = va_arg(ap, int);
008    for (int i = 2; i <= n_args; i++) {
009        sum += va_arg(ap, int);
010    }
011    va_end(ap);
012
013    return sum;
014 }

這裡借助標準程式庫中 cstdarg 的幾個函數取得可變參數值。

編譯執行,結果如下


$ g++ u0805.cpp
$ ./a.out
66
60
169
$

continue ...

沒有留言: