首页 > 后端开发 > C++ > lambda 表达式在 C++ 中如何处理异常?

lambda 表达式在 C++ 中如何处理异常?

WBOY
发布: 2024-04-17 12:42:02
原创
1030 人浏览过

在 C 中,使用 Lambda 表达式处理异常有两种方法:使用 try-catch 块捕获异常,并在 catch 块中处理或重新抛出异常。使用 std::function 类型的包装函数,其 try_emplace 方法可以捕获 Lambda 表达式中的异常。

lambda 表达式在 C++ 中如何处理异常?

使用 Lambda 表达式在 C 中处理异常

简介

Lambda 表达式是一种匿名函数,它可以捕捉外部变量并按值或引用传递参数。在 C 中,Lambda 表达式可以用于多种目的,包括处理异常。

使用 try-catch 块

try-catch 块是处理 Lambda 表达式中异常的标准方法。catch 块允许捕获特定类型的异常或所有异常。以下示例演示了如何在 Lambda 表达式中使用 try-catch 块处理异常:

#include <functional>
#include <iostream>

int main() {
  auto lambda =  [](int x) -> int {
    try {
      return x / 0;  // 将引发 std::runtime_error 异常
    } catch (const std::exception& e) {
      std::cout << "Exception caught: " << e.what() << std::endl;
      return -1;
    }
  };

  int result = lambda(10);
  std::cout << "Result: " << result << std::endl;
  return 0;
}
登录后复制

使用 std::function

另一种处理 Lambda 表达式中异常的方法是使用 std::functionstd::function 是一种包装函数,它可以接受不同的函数类型,包括 Lambda 表达式。std::function 提供了一个 try_emplace 方法,它允许在 Lambda 表达式中捕获异常。以下示例演示了如何使用 std::function 来处理异常:

#include <functional>
#include <iostream>

int main() {
  std::function<int(int)> lambda;
  try {
    lambda = [](int x) -> int { return x / 0; };  // 将引发 std::runtime_error 异常
  } catch (const std::exception& e) {
    std::cout << "Exception caught: " << e.what() << std::endl;
    lambda = [](int x) -> int { return -1; };
  }

  int result = lambda(10);
  std::cout << "Result: " << result << std::endl;
  return 0;
}
登录后复制

实战案例

考虑一个具有以下接口的函数:

int do_something(const std::string& input);
登录后复制

此函数可能引发 std::invalid_argument 异常,如果 input 无效。我们可以使用 Lambda 表达式和 try-catch 块来处理此异常,如下所示:

auto do_something_safe = [](const std::string& input) -> int {
  try {
    return do_something(input);
  } catch (const std::invalid_argument& e) {
    // 处理异常并返回 -1
    std::cout << "Invalid input: " << e.what() << std::endl;
    return -1;
  }
};
登录后复制

然后,我们可以在代码中安全地调用 do_something_safe,而无需显式处理异常。

以上是lambda 表达式在 C++ 中如何处理异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板