亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c++11中的noexcept關鍵字

 更新時間:2022年07月20日 10:33:52   作者:卻道天涼_好個秋  
這篇文章主要介紹了c++11中的noexcept關鍵字,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

c++11中noexcept關鍵字

1. 概念

noexcept關鍵字是c++11之后新增的。該關鍵字會告訴編譯器,被修飾的函數(shù)不會發(fā)生異常,這有利于編譯器對程序做更多的優(yōu)化。

2. 兩種形式

1)noexcept

2)noexcept(expression)

noexcept(true) 表示被修飾的函數(shù)不拋出異常,noexcept(false) 表示被修飾的函數(shù)會拋出異常。

3. 異常處理

//例1
bool Compare(int x, int y) throw() ? //C++11之前
{
?? ?return x > y;
}
?
//例2
bool Compare(int x, int y) noexcept(noexcept(x > y)) ?//C++11
{
?? ?return x > y;
}

例2用到了noexcept運算符,表示,如果x > y不發(fā)生異常,則Compare函數(shù)不會發(fā)生異常。

4. 實現(xiàn)原理

noexecpt函數(shù)向外拋出了異常(如果函數(shù)內(nèi)部捕捉了異常并完成處理,這種情況不算拋出異常),程序會直接終止,調(diào)用std::terminate()函數(shù),該函數(shù)內(nèi)部會調(diào)用std::abort()終止程序。

5. 使用場景

1)移動構造函數(shù)

2)移動分配函數(shù)

3)析構函數(shù)

4)葉子函數(shù)

c++11關鍵字noexcept替代throw

相比于斷言適用于排除邏輯上不可能存在的狀態(tài),異常通常是用于邏輯上可能發(fā)生的錯誤。

在異常處理的代碼中,程序員有可能看到過如下的異常聲明表達形式:

void excpt_func() throw(int, double) { ... }

在excpt_func函數(shù)聲明之后,我們定義了一個動態(tài)異常聲明throw(int, double),該聲明指出了excpt_func可能拋出的異常的類型。事實上,該特性很少被使用,因此在C++11中被棄用了(參見附錄B),而表示函數(shù)不會拋出異常的動態(tài)異常聲明throw()也被新的noexcept異常聲明所取代。

noexcept形如其名地,表示其修飾的函數(shù)不會拋出異常。不過與throw()動態(tài)異常聲明不同的是,在C++11中如果noexcept修飾的函數(shù)拋出了異常,編譯器可以選擇直接調(diào)用std::terminate()函數(shù)來終止程序的運行,這比基于異常機制的throw()在效率上會高一些。這是因為異常機制會帶來一些額外開銷,比如函數(shù)拋出異常,會導致函數(shù)棧被依次地展開(unwind),并依幀調(diào)用在本幀中已構造的自動變量的析構函數(shù)等。

noexcept修飾符有兩種形式

  • 一種就是簡單地在函數(shù)聲明后加上noexcept關鍵字。比如:void excpt_func() noexcept; 
  • 另外一種則可以接受一個常量表達式作為參數(shù),如下所示:void excpt_func() noexcept (常量表達式); 

常量表達式的結(jié)果會被轉(zhuǎn)換成一個bool類型的值。該值為true,表示函數(shù)不會拋出異常,反之,則有可能拋出異常。這里,不帶常量表達式的noexcept相當于聲明了noexcept(true),即不會拋出異常。

在C++98中,new可能會包含一些拋出的std::bad_alloc異常。

void* operator new(std::size_t) throw(std::bad_alloc); ?
void* operator new[](std::size_t) throw(std::bad_alloc); ?

而在C++11中,則使用noexcept(false)來進行替代。  

void* operator new(std::size_t) noexcept(false);
void* operator new[](std::size_t) noexcept(false); ?

當然,noexcept更大的作用是保證應用程序的安全。比如一個類析構函數(shù)不應該拋出異常,那么對于常被析構函數(shù)調(diào)用的delete函數(shù)來說,C++11默認將delete函數(shù)設置成noexcept,就可以提高應用程序的安全性。 

void operator delete(void*) noexcept;
void operator delete[](void*) noexcept; ?

而同樣出于安全考慮,C++11標準中讓類的析構函數(shù)默認也是noexcept(true)的

另外:

void fun (); // 能拋出任何類型的異常
void fun () throw(except1,except2,except3) // 后面括號里面是一個異常參數(shù)表,本例中只能拋出這3中異常
void fun () throw() ? // 參數(shù)表為空,不能拋出異常

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 深入理解c/c++ 內(nèi)存對齊

    深入理解c/c++ 內(nèi)存對齊

    這篇文章主要介紹了c/c++ 內(nèi)存對齊,有需要的朋友可以參考一下
    2014-01-01
  • C++移動操作,RVO和NRVO詳細

    C++移動操作,RVO和NRVO詳細

    本文將討論了何時C++會自動進行移動操作,并且說明了復制消除,RVO和NRVO優(yōu)的化等香瓜吧資料,需要的小伙伴可以參考一下
    2021-09-09
  • C語言示例代碼講解棧與隊列

    C語言示例代碼講解棧與隊列

    棧和隊列,嚴格意義上來說,也屬于線性表,因為它們也都用于存儲邏輯關系為?"一對一"?的數(shù)據(jù),但由于它們比較特殊,本章講解分別用隊列實現(xiàn)棧與用棧實現(xiàn)隊列
    2022-05-05
  • C++基于easyx圖形庫實現(xiàn)打磚塊游戲

    C++基于easyx圖形庫實現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細介紹了C++基于easyx圖形庫實現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++實現(xiàn)簡易反彈小球游戲的示例代碼

    C++實現(xiàn)簡易反彈小球游戲的示例代碼

    我們利用printf 函數(shù)實現(xiàn)一個在屏幕上彈跳的小球。彈跳的小球游戲比較簡單、容易入門,也是反彈球消磚塊、接金幣、臺球等很多游戲的基礎,感興趣的可以了解一下
    2022-10-10
  • C語言 存儲類詳解及示例代碼

    C語言 存儲類詳解及示例代碼

    本篇文章主要介紹C語言 存儲類,這里幫大家整理了存儲類的基礎資料,并提供示例代碼和詳細介紹,有興趣的小伙伴可以參考下
    2016-08-08
  • C語言的fork函數(shù)在Linux中的進程操作及相關面試題講解

    C語言的fork函數(shù)在Linux中的進程操作及相關面試題講解

    fork函數(shù)只能在類Unix的系統(tǒng)中使用,用于創(chuàng)建子線程,這里總結(jié)了C語言的fork函數(shù)在Linux中的進程操作及相關面試題講解,先來看一下C語言程序的存儲空間與進程示意:
    2016-06-06
  • C語言獲取Linux系統(tǒng)精確時間的方法

    C語言獲取Linux系統(tǒng)精確時間的方法

    下面小編就為大家?guī)硪黄狢語言獲取Linux系統(tǒng)精確時間的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • C++?STL容器與函數(shù)謂詞示例分析講解

    C++?STL容器與函數(shù)謂詞示例分析講解

    這篇文章主要介紹了C++?STL容器與函數(shù)謂詞示例,STL是“Standard?Template?Library”的縮寫,中文譯為“標準模板庫”。STL是C++標準庫的一部分,不用單獨安裝
    2022-11-11
  • C語言約瑟夫環(huán)的實現(xiàn)

    C語言約瑟夫環(huán)的實現(xiàn)

    這篇文章主要介紹了C語言約瑟夫環(huán)的實現(xiàn)的相關資料,這里主要是利用數(shù)據(jù)數(shù)據(jù)結(jié)果中循環(huán)鏈表來實現(xiàn),需要的朋友可以參考下
    2017-08-08

最新評論