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. |
<metanoindex/>
Specifies whether a function will throw exceptions or not.
Sintassi
noexcept
|
(1) | ||||||||
noexcept(expression)
|
(2) | ||||||||
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.
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().
Parole chiave
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
}
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) |