A differenza di 'dynamic_cast<Derived*>(ptr)' che in caso di fallimento restituisce 'nullptr', il cast polimorfico applicato a un riferimento ('dynamic_cast<Derived&>(ref)') non potendo restituire null solleva l'eccezione 'std::bad_cast'.
STD_BAD_CAST
→
L'operatore 'typeid(*ptr)' applicato a un puntatore polimorfico (classe con almeno un metodo virtuale) verifica che l'indirizzo non sia NULL; se 'ptr == nullptr', solleva 'std::bad_typeid'.
STD_BAD_TYPEID
→
Il metodo 'str.find()' restituisce 'std::string::npos' (un intero senza segno 'size_t' equivalente a (size_t)-1); memorizzare il risultato in una variabile 'int' a 32 bit su sistemi a 64 bit tronca il valore, rendendo il controllo 'res == std::string::npos' sempre falso.
STRING_NPOS_COMPARISON
→
Aggiungere elementi a un vettore con 'push_back' all'interno di un ciclo che utilizza iteratori può causare la riallocazione della memoria heap interna, rendendo invalidi tutti i puntatori e iteratori esistenti.
ITERATOR_INVALIDATION
→
Il container ordinato 'std::map<Key, Value>' ordina le chiavi tramite il predicato 'std::less<Key>'; se il tipo della chiave non sovraccarica 'operator<(const Key&)' o non viene fornito un comparatore personalizzato, il codice non compila.
MAP_KEY_NO_LESS_OPERATOR
→
Utilizzare una classe o struct personalizzata come chiave di un 'std::unordered_map' richiede obbligatoriamente di definire una specializzazione di 'std::hash<Key>' e l'operatore 'operator==' per il confronto di uguaglianza.
UNORDERED_MAP_NO_HASH
→
L'eccezione viene sollevata dalle funzioni di parsing della libreria standard (es. 'std::stoi', 'std::stod') quando la stringa passata non contiene cifre numeriche valide convertibili.
STD_INVALID_ARGUMENT
→
A differenza dell'operatore '[]' che in C++ non effettua controlli sui limiti (generando UB), il metodo '.at(index)' verifica la dimensione del container e solleva l'eccezione 'std::out_of_range' se l'indice è non valido.
STD_OUT_OF_RANGE
→