//動態異常聲明thro由於很少使用,在c++11中被棄用了
//表示函數不會拋出異常的動態異常聲明throw()也被新的noexcept異常聲明所取代
//noexcept修飾的函數不會拋出異常
//在c++11中,如果noexcept修飾的函數拋出了異常,編譯器可以選擇直接調用std::terminate()
//來終止程序的運行,這比基於異常機制的throw()在效率上會高出一些。
//使用noexcept可以有效的阻止異常的傳播與擴散
#include <iostream>
using namespace std;
void throw_(){ throw 1; }
void NoBlockThrow(){ throw_(); }
void BlockThrow() noexcept { throw_(); }
int main()
{
/*try
{
throw_();
}
catch (...)
{
cout << "found throw." << endl;
}
try
{
NoBlockThrow();
}
catch (...)
{
cout << "throw is not blocked" << endl;
}*/
try
{
BlockThrow();
}
catch (...)
{
cout << "found throw 1" << endl;
}
//noexcept修飾的函數拋出了異常,編譯器可以選擇直接調用std::terminate()
//來終止程序的運行,
}
這個程序運行的時候,前兩個try catch會正常輸出xx到控制檯,最後一個try-catch塊,程序會彈出錯誤框表示程序已被終止,這就是因爲如果noexcept修飾的函數拋出了異常,那麼編譯器就直接調用std::terminate()終止了程序的運行。
C++11新特性學習筆記—noexcept關鍵字
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.