Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
C++11: specifica se una funzione potrebbe generare eccezioni.
Sintassi
noexcept-specifier
:
noexcept
noexcept-expression
throw
(
)
noexcept-expression
:
noexcept
(
constant-expression
)
Parametri
constant-expression
Espressione costante di tipo bool
che indica se il set di potenziali tipi di eccezione è vuoto. La versione non condizionale equivale a noexcept(true)
.
Osservazioni:
Un noexcept-expression
è un tipo di specifica di eccezione: un suffisso a una dichiarazione di funzione che rappresenta un set di tipi che potrebbero corrispondere a un gestore eccezioni per qualsiasi eccezione che esce da una funzione. Operatore noexcept(constant_expression)
condizionale unario quando constant_expression
restituisce true
e il relativo sinonimo noexcept
incondizionato , specificare che il set di potenziali tipi di eccezione che possono uscire da una funzione è vuoto. Ovvero, la funzione non genera mai un'eccezione e non consente mai la propagazione di un'eccezione all'esterno dell'ambito. L'operatore noexcept(constant_expression)
quando constant_expression
restituisce false
o l'assenza di una specifica di eccezione (diversa da per un distruttore o una funzione di deallocazione), indica che il set di potenziali eccezioni che possono uscire dalla funzione è il set di tutti i tipi.
Contrassegnare una funzione come noexcept
solo se tutte le funzioni chiamate, direttamente o indirettamente, sono anche noexcept
o const
. Il compilatore non controlla necessariamente ogni percorso di codice per le eccezioni che potrebbero raggiungere una noexcept
funzione. Se un'eccezione esce dall'ambito esterno di una funzione contrassegnata, noexcept
std::terminate
viene richiamata immediatamente e non esiste alcuna garanzia che i distruttori di qualsiasi oggetto nell'ambito vengano richiamati. Usare noexcept
anziché l'identificatore throw()
di eccezione dinamico . La specifica di eccezione dinamica, o throw(optional_type_list)
specifica, è stata deprecata in C++11 e rimossa in C++17, ad eccezione throw()
di , che è un alias per noexcept(true)
. È consigliabile applicare noexcept
a qualsiasi funzione che non consenta mai la propagazione di un'eccezione nello stack di chiamate. Quando una funzione viene dichiarata noexcept
, consente al compilatore di generare codice più efficiente in diversi contesti. Per altre informazioni, vedere Specifiche delle eccezioni.
Esempio
Un modello di funzione che copia il relativo argomento può essere dichiarato noexcept
nella condizione che l'oggetto copiato sia un tipo di dati precedente normale (POD). Tale funzione potrebbe essere dichiarata come segue:
#include <type_traits>
template <typename T>
T copy_object(const T& obj) noexcept(std::is_pod<T>)
{
// ...
}
Vedi anche
Procedure consigliate C++ moderne per le eccezioni e la gestione degli errori
Specifiche delle eccezioni (throw
, noexcept
)