1. 程式人生 > >C++11新特性(78)-noexcept運算子(noexcept operator)

C++11新特性(78)-noexcept運算子(noexcept operator)

前一篇文章說明了noexcept說明符,使用了該說明符就相當於對程式設計師和編譯器雙方承諾不會丟擲異常。程式設計師看到這個承諾,可以不必編寫複雜的異常捕捉程式碼;編譯器看到這個承諾,可以執行某些可能丟擲異常時無法進行的優化操作。

異常符說明的實參

前一篇文章沒有提到,實際上noexcept說明符是可以接受一個bool型別的引數的。

實參為true則說明該函式不會丟擲異常,反之則說明該函式可能丟擲異常。這種方式在處理是否丟擲異常不一定的情況下很有用,例如以下模板函式:

在fun中,如果T的型別為簡單資料(例如int)則賦值語句不會丟擲異常;如果T的型別為一個類(例如string),賦值語句就可能丟擲異常。程式碼中使用is_pod來判斷資料是否為POD(Plain Old Data

 type)來決定fun是否為noexcept。示例程式碼如下:

輸出結果如下:

noexcept運算子

C++11還另外提供了noexcept運算子,用於確認一個處理是否會丟擲異常。例如下面的程式碼:

fun2是否會丟擲異常,決定於fun是否會丟擲異常。程式碼首先通過noexcept運算子來計算fun(a,b)是否丟擲異常,計算結果是一個布林值,正好作為noexcept說明符的引數。示例程式碼如下:

輸出結果如下:

作者一句話

更加高階的功能適用於更加精細的需求。

示例程式碼下載地址

https://github.com/xueweiguo/OOThinking/blob/master/20180522%20NoexceptOperator.cpp

 

覺得本文有幫助?請分享給更多人。

閱讀更多更新文章,請掃描下面二維碼,關注微信公眾號【面向物件思考】