Share via


noexcept (C++)

C++11: 指定函式是否可能會擲回例外狀況。

語法

noexcept-specifier
noexcept
noexcept-expression
throw ( )
noexcept-expression
noexcept ( constant-expression )

參數

constant-expression
bool 別的常數運算式,表示可能例外狀況類型的集合是否空白。 無條件版本相當於 noexcept(true)

備註

noexcept-expression是一種例外狀況規格 :函式宣告的 尾碼,代表例外狀況處理常式可能會比對結束函式的任何例外狀況的一組型別。 產生 trueconstant_expression ,一元條件運算子 noexcept(constant_expression) 及其無條件同義字 noexcept ,指定可以結束函式的潛在例外狀況類型集合是空的。 也就是說,函式絕不會擲回例外狀況,而且絕不允許將例外狀況傳播到其範圍之外。 noexcept(constant_expression)當產生 falseconstant_expression ,運算子或沒有例外狀況規格(除了解構函式或解除配置函式以外),表示可以結束函式的潛在例外狀況集合是所有型別的集合。

只有當函式呼叫的所有函式直接或間接都是 或 const 時,才會將函 noexcept 式標示為 noexcept 。 編譯器不一定檢查每個程式碼路徑是否有可能會升至函式的例外狀況 noexcept 。 如果例外狀況確實結束標示 noexceptstd::terminate 為 的函式外部範圍,則會立即叫用 ,而且不保證會叫用任何範圍內物件的解構函式。 使用 noexcept ,而不是動態例外狀況規範 throw()動態例外狀況規格 throw(optional_type_list) 規格在 C++11 中已被取代,並在 C++17 中移除,但 除外 throw() ,這是 的 noexcept(true) 別名。 建議您套用 noexcept 至任何絕不允許例外狀況傳播呼叫堆疊的函式。 宣告函式 noexcept 時,它可讓編譯器在數個不同的內容中產生更有效率的程式碼。 如需詳細資訊,請參閱 例外狀況 規格。

範例

複製其引數的函式範本可能會在複製的物件是一般舊資料類型 (POD) 的條件上宣告 noexcept 。 這類函式可以宣告如下:

#include <type_traits>

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

另請參閱

例外狀況和錯誤處理的新式 C++ 最佳做法
例外狀況規格 ( thrownoexcept