Maison > développement back-end > C++ > le corps du texte

Application des paramètres par défaut des fonctions C++ et des paramètres variables dans les expressions Lambda

王林
Libérer: 2024-04-22 15:06:02
original
506 Les gens l'ont consulté

Dans les expressions Lambda, les paramètres par défaut vous permettent de spécifier les valeurs des paramètres par défaut, tandis que les paramètres variables vous permettent de transmettre un nombre variable de paramètres. Les paramètres par défaut doivent suivre les paramètres requis, tandis que les paramètres variadiques doivent être les derniers paramètres de la fonction. Ces fonctionnalités simplifient le code et améliorent la lisibilité, comme l'ajout de préfixes et de suffixes lorsque vous travaillez avec des listes de chaînes.

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

Application des paramètres par défaut des fonctions C++ et des paramètres variables dans l'expression Lambda

L'expression Lambda est une fonction anonyme qui permet la création de fonctions au moment de l'exécution. Nous pouvons améliorer la fonctionnalité des expressions Lambda en utilisant des paramètres par défaut et des paramètres variadiques.

Paramètres par défaut

Les paramètres par défaut nous permettent de spécifier des valeurs par défaut pour les paramètres d'une expression Lambda. Si aucun paramètre n'est fourni lors de l'appel, les valeurs par défaut seront utilisées.

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;
}
Copier après la connexion

Paramètres variables

Les paramètres variables nous permettent de transmettre un nombre variable de paramètres à une expression Lambda. Les paramètres variadiques doivent être le dernier paramètre des paramètres de la fonction et sont représentés par ....

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;
}
Copier après la connexion

Cas pratique

Nous pouvons utiliser des paramètres par défaut et des paramètres variables pour simplifier le code et améliorer la lisibilité. Par exemple, considérons une fonction qui gère une liste de chaînes :

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;
}
Copier après la connexion

Sortie :

Prefix: "Mr", Suffix: "."
Mr.John.
Mr.Mary.
Mr.Bob.
Prefix: empty, Suffix: "!"
John!
Mary!
Bob!
No prefix or suffix
John
Mary
Bob
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
c++
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal