2016-01-06 17 views
6

C++ 14 standard definisce il ritrovamento) funzioni membro (di std::map come segue:Perché std :: map find() non è dichiarato come noexcept?

iterator find(const key_type& x); 
const_iterator find(const key_type& x) const; 

Perché queste funzioni non definite come noexcept? Cosa potrebbe andare storto all'interno, ciò richiederebbe un'eccezione o produrrebbe un comportamento indefinito (oltre a non trovare un elemento nel qual caso la funzione restituisce un iteratore end e non sarà richiesto nessun lancio di eccezione)?

+4

correlati: http://stackoverflow.com/questions/20517259/why-vector-access-operators-are-not-specified-as-noexcept – NathanOliver

+0

Non penso che la funzione 'Compare' di una mappa debba essere no, quindi non credo che 'find()' potrebbe essere noesato dato che confronta i tasti – 88877

+0

@ 88877 Naturalmente, 'Compare' può effettivamente lanciare:' 23.2.4.1.1' di C++ 14 stati 'cancella (k) non lancia un'eccezione a meno che tale eccezione non venga lanciata dall'oggetto Confronta del contenitore (se presente). »Si prega di rendere il commento una risposta. – PowerGamer

risposta

4

find() si basa sul metodo Compare() della mappa, che potrebbe generare un'eccezione (si immagini il caso di una chiave complessa che potrebbe essere errata). Quindi, non possiamo essere sicuri che find() non solleverà un'eccezione.