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 exceptions template <class T> void foo() noexcept(noexcept(T())) {} void bar() noexcept(true) {} void baz() noexcept { throw 42; } // 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) |