Condividi tramite


noexcept (C++)

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 truee il relativo sinonimo noexceptincondizionato , 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 falseo 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, noexceptstd::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)