Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah ungkapan lambda mengendalikan pengecualian dalam C++?
Dalam C++, terdapat dua cara untuk mengendalikan pengecualian menggunakan ungkapan Lambda: tangkap pengecualian menggunakan blok cuba-tangkap dan kendalikan atau buang semula pengecualian dalam blok tangkapan. Gunakan fungsi pembalut jenis std::functionf84160cf178f81a7d5a39a6f2f61366c yang kaedah try_emplacenya boleh menangkap pengecualian dalam ungkapan Lambda.
Menggunakan Ungkapan Lambda untuk Mengendalikan Pengecualian dalam C++
Pengenalan
Ungkapan Lambda ialah fungsi tanpa nama yang menangkap pembolehubah luaran dan lulus parameter mengikut nilai Dalam C++, ungkapan lambda boleh digunakan untuk pelbagai tujuan, termasuk pengendalian pengecualian.
Menggunakan blok cuba-tangkap
blok cuba-tangkap ialah cara standard untuk mengendalikan pengecualian dalam ungkapan Lambda. Blok tangkapan membolehkan menangkap jenis pengecualian tertentu atau semua pengecualian. Contoh berikut menunjukkan cara menggunakan blok try-catch dalam ungkapan Lambda untuk mengendalikan pengecualian:
#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; }
Menggunakan std::function
Cara lain untuk mengendalikan pengecualian dalam ungkapan Lambda ialah menggunakan std:: fungsi
. std::function
ialah fungsi pembungkus yang menerima jenis fungsi yang berbeza, termasuk ungkapan Lambda. std::function
menyediakan kaedah try_emplace
yang membenarkan pengecualian ditangkap dalam ungkapan Lambda. Contoh berikut menunjukkan cara menggunakan std::function
untuk mengendalikan pengecualian: 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
input
tidak sah. Kami boleh mengendalikan pengecualian ini menggunakan ungkapan Lambda dan blok try-catch
seperti yang ditunjukkan di bawah: 🎜rrreee🎜Kami kemudiannya boleh memanggil do_something_safe
dengan selamat dalam kod kami sementara Tidak perlu mengendalikan pengecualian secara eksplisit. 🎜Atas ialah kandungan terperinci Bagaimanakah ungkapan lambda mengendalikan pengecualian dalam C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!