国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

了解C++編程中指定的異常和未經(jīng)處理的異常

2020-05-23 14:09:02
字體:
來源:轉載
供稿:網(wǎng)友
這篇文章主要介紹了C++中指定的異常和未經(jīng)處理的異常,介紹了有關noexcept和terminate的作用,并結合了C++11標準的新特性,需要的朋友可以參考下
 

noexcept
C++11:指定函數(shù)是否可能會引發(fā)異常。
語法

ReturnType FunctionName(params) noexcept;ReturnType FunctionName(params) noexcept(noexcept(expression);

參數(shù)
表達式
計算結果是 True 或 False 的常量表達式。無條件版本相當于 noexcept(true)。
備注
noexcept(及其同義詞 noecept(true))指定函數(shù)絕不會引發(fā)異常,或允許從異常直接或間接調用的任何其他函數(shù)傳播異常。更具體地說,noexcept 意味著,僅當調用的所有函數(shù)也為 noexcept 或 const 并且沒有要求運行時檢查、應用于類型為多態(tài)類類型的 glvalue 表達式的 typeid 表達式或 throw 表達式的潛在已評估轉換時,該函數(shù)才是 noexcept。但是,編譯器不一定會檢查可能歸因于 noexcept 函數(shù)的異常的每個代碼路徑。如果異常確實到達標記為 noexcept 的函數(shù),則會立即調用 std::terminate,并且不會保證將調用任何范圍內對象的析構函數(shù)。
使用條件 noexcept 聲明的且計算結果為 noexcept(false) 的函數(shù)指定它確實允許傳播異常。例如,當要復制的對象是普通的舊數(shù)據(jù)類型 (POD) 時,可將復制其參數(shù)的函數(shù)聲明為 noexcept。此類函數(shù)可以如下聲明:

#include <type_traits>template <typename T>T copy_object(T& obj) noexcept(std::is_pod<T>){ //. . . }

使用 noexcept 代替異常說明符 throw,后者在 C++11 和更高版本中已棄用。當你確信函數(shù)絕不允許異常傳播到調用堆棧時,我們建議你將 noexcept 應用到函數(shù)。使用 noexcept 聲明的函數(shù)使編譯器可以在多種不同的上下文中生成更高效的代碼。

未經(jīng)處理的 C++ 異常
如果無法找到當前異常的匹配處理程序(或省略號 catch 處理程序),則調用預定義的 terminate 運行時函數(shù)。(您也可以在任意處理程序中顯式調用 terminate。)terminate 的默認操作是調用 abort。如果您希望 terminate 在退出應用程序之前調用程序中的某些其他函數(shù),則用被調用函數(shù)的名稱作為其單個參數(shù)調用 set_terminate 函數(shù)。您可以在程序的任何點調用 set_terminate。 terminate 例程總是調用指定為 set_terminate 的參數(shù)的最后一個函數(shù)。
以下示例引發(fā) char * 異常,但不包含用于捕獲類型 char * 的異常的指定處理程序。對 set_terminate 的調用指示 terminate 調用 term_func。

// exceptions_Unhandled_Exceptions.cpp// compile with: /EHsc#include <iostream>using namespace std;void term_func() {  cout << "term_func was called by terminate." << endl;  exit( -1 );}int main() {  try  {   set_terminate( term_func );   throw "Out of memory!"; // No catch handler for this exception  }  catch( int )  {   cout << "Integer exception raised." << endl;  }  return 0;}

輸出:

term_func was called by terminate.

term_func 函數(shù)最好是通過調用 exit 來終止程序或當前線程。如果它沒有這樣做,而是返回到其調用方,則調用 abort。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 绥滨县| 繁昌县| 南江县| 衡水市| 湘阴县| 金沙县| 八宿县| 富阳市| 广南县| 荃湾区| 玛纳斯县| 富平县| 寿光市| 威信县| 庄河市| 介休市| 双峰县| 磴口县| 城步| 东乡| 灵川县| 西吉县| 枣阳市| 高邑县| 景洪市| 商城县| 丹阳市| 耿马| 苏尼特左旗| 永定县| 安岳县| 长治市| 东城区| 孟连| 靖宇县| 普兰店市| 舒兰市| 廉江市| 晋城| 佳木斯市| 思南县|