ホームページ > バックエンド開発 > C++ > ラムダ式は C++ の例外をどのように処理しますか?

ラムダ式は C++ の例外をどのように処理しますか?

WBOY
リリース: 2024-04-17 12:42:02
オリジナル
1031 人が閲覧しました

C では、Lambda 式を使用して例外を処理する方法が 2 つあります。try-catch ブロックを使用して例外をキャッチする方法と、catch ブロックで例外を処理または再スローする方法です。 std::function 型のラッパー関数を使用します。この関数の try_emplace メソッドは Lambda 式の例外をキャッチできます。

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

#Lambda 式を使用した C での例外の処理

はじめに

Lambda 式は、外部変数を取得し、値または参照によってパラメータを渡す匿名関数です。 C では、ラムダ式は例外の処理など、さまざまな目的に使用できます。

try-catch ブロックの使用

try-catch ブロックは、ラムダ式で例外を処理する標準的な方法です。 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;
}
ログイン後にコピー

Using std::function

例外を処理する別の方法ラムダ式 例外メソッドは

std::function を使用することです。 std::function は、ラムダ式などのさまざまな関数タイプを受け入れることができるラッパー関数です。 std::function は、ラムダ式で例外をキャッチできるようにする try_emplace メソッドを提供します。次の例は、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);
ログイン後にコピー

input が無効な場合、この関数は std::invalid_argument 例外を発生させる可能性があります。次のように、ラムダ式と 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 を安全に呼び出すことができます。例外を処理します。

以上がラムダ式は C++ の例外をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート