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

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

WBOY
WBOY原創
2024-04-17 12:42:021032瀏覽

在 C 中,使用 Lambda 表達式處理異常有兩種方法:使用 try-catch 區塊捕獲異常,並在 catch 區塊中處理或重新拋出異常。使用 std::functionf84160cf178f81a7d5a39a6f2f61366c 類型的包裝函數,其 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 區塊來處理此異常,如下所示:<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>然後,我們可以在程式碼中安全地呼叫

do_something_safe

,而無需顯式處理異常。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn