2016-01-06 3 views
6

C++ 14 norme définit les FIND() fonctions membres de std::map comme suit:Pourquoi std :: map find() n'est pas déclaré comme noexcept?

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

Pourquoi ces fonctions ne sont pas définies comme noexcept? Qu'est-ce qui pourrait mal tourner à l'intérieur, qui nécessiterait de lancer une exception ou de produire un comportement indéfini (autre que de ne pas trouver un élément, auquel cas la fonction renvoie un itérateur end et aucune exception ne serait nécessaire)?

+4

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

+0

Je ne pense pas que la fonction 'Compare' d'une carte doive être noexept, donc je ne pense pas 'find()' pourrait être noexept puisqu'il compare les clés – 88877

+0

@ 88877 Bien sûr, 'Compare' peut jeter en effet:' 23.2.4.1.1' de C++ 14 états 'effacer (k) ne lance pas d'exception à moins que cette exception ne soit lancée par l'objet Compare du conteneur (le cas échéant). »Veuillez répondre à votre commentaire. – PowerGamer

Répondre

4

find() sont basées sur la méthode Compare() de la carte, qui pourrait générer une exception (imaginez le cas d'une clé complexe qui pourrait être incorrecte). Donc, nous ne pouvons pas être sûrs que find() ne déclenchera pas d'exception.