noexcept specifier (dal C++11)
![]() | Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate. La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
Specifies whether a function will throw exceptions or not.
Indice |
[modifica]Sintassi
noexcept | (1) | ||||||||
noexcept( expression) | (2) | ||||||||
[modifica]Spiegazione
If the value of the constant expression is true, the function is declared to not throw any exceptions. noexcept
without a constant expression is equivalent to noexcept(
true)
.
One of the uses of the constant expression is (along with the NJ operatore) to define templated functions that declare noexcept
for some types but not others.
Note that a noexcept
specification on a function is not a compile-time check; it is merely a method for a programmer to inform the compiler whether or not a function should throw exceptions. The compiler can use this information to enable certain optimizations on non-throwing functions as well as enable the NJ operatore, which can check at compile time if a particular expression is declared to throw any exceptions. For example, containers such as std::vector will move their elements if the elements' move constructor is noexcept
, and copy otherwise.
If a function marked noexcept
allows an uncaught exception to escape at runtime, std::terminate is called immediately.
[modifica]Deprecates
noexcept
is an improved version of throw(), which is deprecated in C++11. Unlike throw(), noexcept
will not call std::unexpected and may or may not unwind the stack, which potentially allows the compiler to implement noexcept
without the runtime overhead of throw().
[modifica]Parole chiave
[modifica]Esempio
// whether foo is declared noexcept depends on if the expression// T() will throw any exceptionstemplate<class T>void foo()noexcept(noexcept(T())){}void bar()noexcept(true){}void baz()noexcept{throw42;}// noexcept is the same as noexcept(true) int main(){ foo<int>();// noexcept(noexcept(int())) => noexcept(true), so this is fine bar();// fine baz();// compiles, but at runtime this calls std::terminate}
[modifica]Vedi anche
noexcept operatore | determines if an expression throws any exceptions (dal C++11) |
un'eccezione specifica | specifica quali eccezioni vengono generate da un (deprecato) funzione Original: specifies what exceptions are thrown by a function (deprecato) The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
tiro espressione | segnala un errore e trasferisce il controllo dell'errore gestore Original: signals an error and transfers control to error handler The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
(C++11) | ottiene un riferimento rvalue se il costruttore mossa non genera Original: obtains an rvalue reference if the move constructor does not throw The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (funzione di modello) |