Heim > Artikel > Backend-Entwicklung > Wie behandeln Lambda-Ausdrücke Ausnahmen in C++?
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::functionf84160cf178f81a7d5a39a6f2f61366c, deren try_emplace-Methode Ausnahmen in Lambda-Ausdrücken abfangen kann.
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; }
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::function
。std::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
rrreee
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!