C++11新特性學習筆記—noexcept關鍵字

//動態異常聲明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()終止了程序的運行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章