>  기사  >  백엔드 개발  >  람다 표현식은 C++에서 예외를 어떻게 처리하나요?

람다 표현식은 C++에서 예외를 어떻게 처리하나요?

WBOY
WBOY원래의
2024-04-17 12:42:02991검색

C++에서는 Lambda 표현식을 사용하여 예외를 처리하는 두 가지 방법이 있습니다. try-catch 블록을 사용하여 예외를 포착하고, catch 블록에서 예외를 처리하거나 다시 발생시킵니다. try_emplace 메서드가 Lambda 표현식에서 예외를 포착할 수 있는 std::functionf84160cf178f81a7d5a39a6f2f61366c 유형의 래퍼 함수를 ​​사용합니다.

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

람다 표현식을 사용하여 C++에서 예외 처리

소개

람다 표현식은 외부 변수를 캡처하고 값 또는 참조로 매개변수를 전달하는 익명 함수입니다. C++에서 람다 식은 예외 처리를 포함하여 다양한 목적으로 사용될 수 있습니다.

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

Using std::functionstd::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 표현식에서 예외를 처리하는 또 다른 방법은 std::를 사용하는 것입니다. 함수 . std::function은 Lambda 표현식을 포함하여 다양한 함수 유형을 허용하는 래퍼 함수입니다. std::function은 Lambda 표현식에서 예외를 포착할 수 있는 try_emplace 메서드를 제공합니다. 다음 예에서는 std::function을 사용하여 예외를 처리하는 방법을 보여줍니다. 🎜rrreee🎜🎜실제 예🎜🎜🎜다음 인터페이스가 있는 함수를 고려하세요. 🎜rrreee🎜이 함수는 를 throw할 수 있습니다. std: :invalid_argument 입력이 유효하지 않은 경우 예외가 발생합니다. 아래와 같이 Lambda 표현식과 try-catch 블록을 사용하여 이 예외를 처리할 수 있습니다. 🎜rrreee🎜 그런 다음 코드에서 do_something_safe를 안전하게 호출할 수 있으며 아니요 예외를 명시적으로 처리해야 합니다. 🎜

위 내용은 람다 표현식은 C++에서 예외를 어떻게 처리하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.