Pengendalian pengecualian dalam ungkapan C++ Lambda tidak mempunyai skopnya sendiri dan pengecualian tidak ditangkap secara lalai. Untuk menangkap pengecualian, anda boleh menggunakan sintaks menangkap ungkapan Lambda, yang membenarkan ungkapan Lambda menangkap pembolehubah dalam skop definisinya untuk pengendalian pengecualian dalam blok cuba-tangkap.
Pengendalian Pengecualian dalam C++ Lambda Expressions
Ekspresi Lambda ialah sintaks fungsi tanpa nama yang dipermudahkan untuk mentakrifkan blok kod. Ia sering digunakan untuk menggantikan fungsi tradisional atau untuk dihantar sebagai input kepada fungsi lain. Walaupun ungkapan lambda sangat berguna, pengendalian pengecualian di dalamnya boleh menjadi mencabar.
Memahami Pengendalian Pengecualian dalam Ungkapan Lambda
Apabila mengendalikan pengecualian dalam ungkapan Lambda, berikut ialah perkara utama yang perlu dipertimbangkan:
Catching Exceptions
Untuk menangkap pengecualian dalam ungkapan Lambda, anda boleh menggunakan sintaks menangkap ungkapan Lambda yang diperkenalkan dalam C++11. Sintaks ini membenarkan ungkapan lambda untuk menangkap pembolehubah dalam skop definisinya.
Berikut ialah contoh ungkapan Lambda yang mendapat pengecualian:
auto lambda = [function]() -> int { try { // 业务逻辑 } catch (const std::exception& e) { // 异常处理代码 return -1; } };
Dalam contoh ini, ungkapan Lambda menangkap fungsi
dan melaksanakannya dalam try-catch
blok Panggilannya melaksanakan pengendalian pengecualian. Jika pengecualian berlaku, ungkapan lambda mengembalikan -1. function
,并在 try-catch
块中对其调用进行异常处理。如果发生异常,Lambda 表达式将返回 -1。
实战案例
考虑以下需要大量数据处理的案例:
std::vector<int> numbers = {1, 2, 3, 4, 5}; int sum = std::accumulate(numbers.begin(), numbers.end(), 0, [](int a, int b) { try { if (b == 0) { throw std::runtime_error("除以零"); } return a / b; } catch (const std::exception& e) { std::cerr << "异常信息:" << e.what() << std::endl; return 0; } });
在这个示例中,Lambda 表达式捕获了对 std::accumulate
中提供的 numbers
向量进行迭代的范围。Lambda 表达式尝试计算每个元素之间的商,如果 b
b
ialah 0. Jika pengecualian berlaku, ungkapan lambda mencetak mesej pengecualian dan mengembalikan 0. 🎜Atas ialah kandungan terperinci Bagaimana untuk mengendalikan pengecualian dalam ungkapan C++ Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!