程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 懂得C++編程中指定的異常和未經處置的異常

懂得C++編程中指定的異常和未經處置的異常

編輯:關於C++

懂得C++編程中指定的異常和未經處置的異常。本站提示廣大學習愛好者:(懂得C++編程中指定的異常和未經處置的異常)文章只能為提供參考,不一定能成為您想要的結果。以下是懂得C++編程中指定的異常和未經處置的異常正文


noexcept
C++11:指定函數能否能夠會激發異常。
語法

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

參數
表達式
盤算成果是 True 或 False 的常量表達式。無前提版原形當於 noexcept(true)。
備注
noexcept(及其同義詞 noecept(true))指定函數毫不會激發異常,或許可從異常直接或直接挪用的任何其他函數流傳異常。更詳細地說,noexcept 意味著,僅當挪用的一切函數也為 noexcept 或 const 而且沒有請求運轉時檢討、運用於類型為多態類類型的 glvalue 表達式的 typeid 表達式或 throw 表達式的潛伏已評價轉換時,該函數才是 noexcept。然則,編譯器紛歧定會檢討能夠歸因於 noexcept 函數的異常的每一個代碼途徑。假如異常確切達到標志為 noexcept 的函數,則會立刻挪用 std::terminate,而且不會包管將挪用任何規模內對象的析構函數。
應用前提 noexcept 聲明的且盤算成果為 noexcept(false) 的函數指定它確切許可流傳異常。例如,當要復制的對象是通俗的舊數據類型 (POD) 時,可將復制其參數的函數聲明為 noexcept。此類函數可以以下聲明:

#include <type_traits>

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

應用 noexcept 取代異常解釋符 throw,後者在 C++11 和更高版本中已棄用。當你確信函數毫不許可異常流傳到挪用客棧時,我們建議你將 noexcept 運用到函數。應用 noexcept 聲明的函數使編譯器可以在多種分歧的高低文中生成更高效的代碼。

未經處置的 C++ 異常
假如沒法找到以後異常的婚配處置法式(或省略號 catch 處置法式),則挪用預界說的 terminate 運轉時函數。(您也能夠在隨意率性處置法式中顯式挪用 terminate。)terminate 的默許操作是挪用 abort。假如您願望 terminate 在加入運用法式之前挪用法式中的某些其他函數,則用被挪用函數的稱號作為其單個參數挪用 set_terminate 函數。您可以在法式的任何點挪用 set_terminate。 terminate 例程老是挪用指定為 set_terminate 的參數的最初一個函數。
以下示例激發 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 函數最好是經由過程挪用 exit 來終止法式或以後線程。假如它沒有如許做,而是前往到其挪用方,則挪用 abort。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved