Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengendalikan pengecualian dalam ungkapan C++ Lambda?

Bagaimana untuk mengendalikan pengecualian dalam ungkapan C++ Lambda?

WBOY
WBOYasal
2024-06-03 15:01:00411semak imbas

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.

C++ Lambda 表达式如何进行异常处理?

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:

  • Ekspresi Lambda tidak mempunyai skopnya sendiri. Mereka mewarisi pembolehubah dan pengendali pengecualian daripada fungsi di mana ia ditakrifkan.
  • Secara lalai, ungkapan Lambda tidak mendapat pengecualian. Jika mereka tidak menangkap pengecualian, mereka menghantarnya ke fungsi panggilan.

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

🎜Kes Praktikal🎜🎜🎜Pertimbangkan kes berikut yang memerlukan pemprosesan data yang berat: 🎜rrreee🎜Dalam contoh ini, ungkapan Lambda menangkap nomborstd::accumulate /code > Julat vektor untuk diulang. Ungkapan lambda cuba mengira hasil bagi setiap elemen dan membuang pengecualian jika 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn