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

lambda 表达式中,默认参数允许指定参数默认值,而可变参数则允许传递数量不定的参数。默认参数应紧随必选参数,而可变参数必须是函数参数中最后一个。这些功能可以简化代码并提高可读性,例如在处理字符串列表时添加前缀和后缀。

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

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

Lambda 表达式是一种匿名函数,它允许在运行时创建函数。我们可以使用默认参数和可变参数来增强 Lambda 表达式的功能。

默认参数

立即学习“C++免费学习笔记(深入)”;

默认参数允许我们为 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& strings,                   string defaultPrefix = "",                   string defaultSuffix = "") {  for (const auto& str : strings) {    cout << defaultPrefix << str << defaultSuffix << endl;  }}int main() {  vector 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 suffixJohnMaryBob

以上就是C++ 函数默认参数和可变参数在 Lambda 表达式中的应用的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1447649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月18日 00:46:16
下一篇 2025年12月18日 00:46:28

相关推荐

发表回复

登录后才能评论
关注微信