Heim > Backend-Entwicklung > C++ > Wie behandeln Lambda-Ausdrücke Ausnahmen in C++?

Wie behandeln Lambda-Ausdrücke Ausnahmen in C++?

WBOY
Freigeben: 2024-04-17 12:42:02
Original
1030 Leute haben es durchsucht

In C++ gibt es zwei Möglichkeiten, Ausnahmen mithilfe von Lambda-Ausdrücken zu behandeln: Die Ausnahme mit einem Try-Catch-Block abfangen und die Ausnahme im Catch-Block behandeln oder erneut auslösen. Verwenden Sie eine Wrapper-Funktion vom Typ std::function, deren try_emplace-Methode Ausnahmen in Lambda-Ausdrücken abfangen kann.

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

Verwenden von Lambda-Ausdrücken zur Behandlung von Ausnahmen in C++

Einführung

Ein Lambda-Ausdruck ist eine anonyme Funktion, die externe Variablen erfasst und Parameter als Wert oder Referenz übergibt. In C++ können Lambda-Ausdrücke für verschiedene Zwecke verwendet werden, einschließlich der Behandlung von Ausnahmen.

Try-Catch-Blöcke verwenden

Try-Catch-Blöcke sind die Standardmethode zur Behandlung von Ausnahmen in Lambda-Ausdrücken. Der Catch-Block ermöglicht das Abfangen bestimmter Ausnahmetypen oder aller Ausnahmen. Das folgende Beispiel zeigt, wie man einen Try-Catch-Block in einem Lambda-Ausdruck verwendet, um Ausnahmen zu behandeln:

#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;
}
Nach dem Login kopieren

Verwendung von std::function

Eine andere Möglichkeit, Ausnahmen in einem Lambda-Ausdruck zu behandeln, ist die Verwendung von std:: Funktion . std::function ist eine Wrapper-Funktion, die verschiedene Funktionstypen akzeptiert, einschließlich Lambda-Ausdrücke. std::function stellt eine try_emplace-Methode bereit, die das Abfangen von Ausnahmen in Lambda-Ausdrücken ermöglicht. Das folgende Beispiel zeigt, wie std::function zur Behandlung von Ausnahmen verwendet wird: 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;
}
Nach dem Login kopieren

实战案例

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

int do_something(const std::string& input);
Nach dem Login kopieren

此函数可能引发 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;
  }
};
Nach dem Login kopieren

然后,我们可以在代码中安全地调用 do_something_saferrreee

🎜Ein praktisches Beispiel🎜🎜🎜Betrachten Sie eine Funktion mit der folgenden Schnittstelle: 🎜rrreee🎜Diese Funktion kann auslösen std: :invalid_argument Ausnahme, wenn input ungültig ist. Wir können diese Ausnahme mit einem Lambda-Ausdruck und einem try-catch-Block behandeln, wie unten gezeigt: 🎜rrreee🎜 Wir können dann do_something_safe sicher in unserem Code aufrufen, und das ist nicht nötig Behandeln Sie Ausnahmen explizit. 🎜

Das obige ist der detaillierte Inhalt vonWie behandeln Lambda-Ausdrücke Ausnahmen in C++?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage