首頁 > 後端開發 > C++ > lambda 表達式在 C++ 中如何處理異常?

lambda 表達式在 C++ 中如何處理異常?

WBOY
發布: 2024-04-17 12:42:02
原創
1030 人瀏覽過

在 C 中,使用 Lambda 表達式處理異常有兩種方法:使用 try-catch 區塊捕獲異常,並在 catch 區塊中處理或重新拋出異常。使用 std::function 類型的包裝函數,其 try_emplace 方法可以捕捉 Lambda 表達式中的例外狀況。

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

使用Lambda 表達式在C 中處理異常

##簡介

Lambda表達式是一種匿名函數,它可以捕捉外部變數並按值或引用傳遞參數。在 C 中,Lambda 表達式可以用於多種目的,包括處理異常。

使用 try-catch 區塊

try-catch 區塊是處理 Lambda 表達式中例外狀況的標準方法。 catch 區塊允許擷取特定類型的異常或所有異常。以下範例示範如何在Lambda 表達式中使用try-catch 區塊處理異常:

#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;
}
登入後複製

使用std::function

另一種處理Lambda 表達式中異常的方法是使用

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;
}
登入後複製

#實戰案例##考慮一個具有下列介面的函數:

int do_something(const std::string& input);
登入後複製

此函數可能引發

std::invalid_argument

例外,如果input 無效。我們可以使用Lambda 表達式和try-catch 區塊來處理此異常,如下所示:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:cpp;toolbar:false;'>auto do_something_safe = [](const std::string&amp; input) -&gt; int { try { return do_something(input); } catch (const std::invalid_argument&amp; e) { // 处理异常并返回 -1 std::cout &lt;&lt; &quot;Invalid input: &quot; &lt;&lt; e.what() &lt;&lt; std::endl; return -1; } };</pre><div class="contentsignin">登入後複製</div></div>然後,我們可以在程式碼中安全地呼叫</p>do_something_safe<p> ,而無需顯式處理異常。 <code>

以上是lambda 表達式在 C++ 中如何處理異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板