首頁  >  文章  >  後端開發  >  C++ 函數預設參數和可變參數在 Lambda 表達式中的應用

C++ 函數預設參數和可變參數在 Lambda 表達式中的應用

王林
王林原創
2024-04-22 15:06:02464瀏覽

Lambda 表達式中,預設參數允許指定參數預設值,而可變參數則允許傳遞數量不定的參數。預設參數應緊跟必選參數,而可變參數必須是函數參數中最後一個。這些功能可以簡化程式碼並提高可讀性,例如在處理字串清單時添加前綴和後綴。

C++ 函数默认参数和可变参数在 Lambda 表达式中的应用

C 函數預設參數和可變參數在Lambda 表達式中的應用

Lambda 表達式是一種匿名函數,它允許在運行時創建函數。我們可以使用預設參數和可變參數來增強 Lambda 表達式的功能。

預設參數

預設參數允許我們為 Lambda 運算式的參數指定預設值。如果呼叫時未提供參數,將使用預設值。

int add(int a, int b = 10) {
  return a + b;
}

int main() {
  auto sum = [](int a, int b) { return a + b; };  // 无默认参数
  auto sumWithDefaultValue = [](int a, int b = 10) { return a + b; };  // 有默认参数

  cout << sum(5, 6) << endl;  // 输出: 11
  cout << sumWithDefaultValue(5) << endl;  // 输出: 15
  return 0;
}

可變參數

可變參數允許我們將數量不定的參數傳遞給 Lambda 表達式。可變參數必須是函數參數中的最後一個參數,並且使用 ... 表示。

int sumAll(int n, ...) {
  va_list args;
  va_start(args, n);

  int sum = n;
  for (int i = 0; i < n; i++) {
    sum += va_arg(args, int);
  }

  va_end(args);
  return sum;
}

int main() {
  auto sumAllLambda = [](int n, ...) {
    va_list args;
    va_start(args, n);

    int sum = n;
    for (int i = 0; i < n; i++) {
      sum += va_arg(args, int);
    }

    va_end(args);
    return sum;
  };

  cout << sumAll(3, 1, 2, 3) << endl;  // 输出: 9
  cout << sumAllLambda(4, 4, 5, 6, 7) << endl;  // 输出: 22
  return 0;
}

實戰案例

我們可以使用預設參數和可變參數來簡化程式碼並提高可讀性。例如,考慮一個處理字串清單的函數:

void processStrings(const vector<string>& strings,
                   string defaultPrefix = "",
                   string defaultSuffix = "") {
  for (const auto& str : strings) {
    cout << defaultPrefix << str << defaultSuffix << endl;
  }
}

int main() {
  vector<string> names = {"John", "Mary", "Bob"};

  cout << "Prefix: \"Mr\", Suffix: \".\"" << endl;
  processStrings(names, "Mr", ".");  // 使用默认参数

  cout << "Prefix: empty, Suffix: \"!\"" << endl;
  processStrings(names, "", "!");  // 只使用可变参数

  cout << "No prefix or suffix" << endl;
  processStrings(names);  // 使用所有默认值

  return 0;
}

輸出:

Prefix: "Mr", Suffix: "."
Mr.John.
Mr.Mary.
Mr.Bob.
Prefix: empty, Suffix: "!"
John!
Mary!
Bob!
No prefix or suffix
John
Mary
Bob

以上是C++ 函數預設參數和可變參數在 Lambda 表達式中的應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn