在 C 中,使用 Lambda 表達式處理異常有兩種方法:使用 try-catch 區塊捕獲異常,並在 catch 區塊中處理或重新拋出異常。使用 std::functionf84160cf178f81a7d5a39a6f2f61366c 類型的包裝函數,其 try_emplace 方法可以捕捉 Lambda 表達式中的例外狀況。
使用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::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
區塊來處理此異常,如下所示:<pre class='brush:cpp;toolbar:false;'>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;
}
};</pre>
然後,我們可以在程式碼中安全地呼叫
,而無需顯式處理異常。
以上是lambda 表達式在 C++ 中如何處理異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!