Heim > Backend-Entwicklung > C++ > Anwendung von C++-Funktionsstandardparametern und Variablenparametern in Lambda-Ausdrücken

Anwendung von C++-Funktionsstandardparametern und Variablenparametern in Lambda-Ausdrücken

王林
Freigeben: 2024-04-22 15:06:02
Original
518 Leute haben es durchsucht

In Lambda-Ausdrücken ermöglichen Ihnen Standardparameter die Angabe von Standardparameterwerten, während Sie mit variablen Parametern eine unbegrenzte Anzahl von Parametern übergeben können. Standardparameter sollten den erforderlichen Parametern folgen, während variadische Parameter der letzte Funktionsparameter sein müssen. Diese Funktionen vereinfachen den Code und verbessern die Lesbarkeit, z. B. das Hinzufügen von Präfixen und Suffixen beim Arbeiten mit Zeichenfolgenlisten.

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

Anwendung von C++-Funktionsstandardparametern und Variablenparametern im Lambda-Ausdruck

Lambda-Ausdruck ist eine anonyme Funktion, die die Erstellung von Funktionen zur Laufzeit ermöglicht. Wir können die Funktionalität von Lambda-Ausdrücken mithilfe von Standardparametern und variadischen Parametern verbessern.

Standardparameter

Standardparameter ermöglichen es uns, Standardwerte für die Parameter eines Lambda-Ausdrucks anzugeben. Wenn beim Aufruf keine Parameter angegeben werden, werden Standardwerte verwendet.

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;
}
Nach dem Login kopieren

Variadische Parameter

Variable Parameter ermöglichen es uns, eine variable Anzahl von Parametern an einen Lambda-Ausdruck zu übergeben. Die Varargs müssen der letzte Parameter in den Funktionsparametern sein und werden durch ... dargestellt.

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;
}
Nach dem Login kopieren

Praktischer Fall

Wir können Standardparameter und variable Parameter verwenden, um den Code zu vereinfachen und die Lesbarkeit zu verbessern. Stellen Sie sich beispielsweise eine Funktion vor, die eine Liste von Zeichenfolgen verarbeitet:

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;
}
Nach dem Login kopieren

Ausgabe:

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

Das obige ist der detaillierte Inhalt vonAnwendung von C++-Funktionsstandardparametern und Variablenparametern in Lambda-Ausdrücken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
c++
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage