Existe-t-il une référence à propos des exceptions de bibliothèque standard C++? Je veux juste savoir quelles fonctions peuvent jeter une exception ou non.Liste d'exceptions de bibliothèque standard C++?
Répondre
En fait, la plupart des fonctions de bibliothèque standard ne lancent pas les exceptions elles-mêmes. Ils transmettent simplement l'exception lancée par le code utilisateur invoqué par eux. Par exemple, si vous push_back()
un élément à un vecteur, cela peut jeter (en raison d'erreurs d'allocation de mémoire et) si le constructeur de copie de l'objet se lève.
A quelques exceptions notables (sans jeu de mots) où les fonctions de bibliothèque jettent sont:
- Certaines méthodes jetteront
out_of_range
si l'index fourni est invalide:std::vector<>::at()
std::basic_string<>::at()
std::bitset<>::set()
,reset()
etflip()
.
- Certaines méthodes jetteront
std::overflow_error
sur débordement d'entier:std::bitset<>::to_ulong()
et (C++ 0x)to_ullong()
.
std::allocator<T>
passera surstd::bad_alloc
lancée parnew
qu'elle invoque.- Les flux peuvent être configurés de sorte que
std::ios_base::failure
soient levés lorsqu'un bit d'état est défini. - grandes allocations de tableaux peuvent jeter
std::bad_array_new_length
- dynamic_cast sur une référence peut jeter un
std::bad_cast
(techniquement pas partie de la bibliothèque standard) - Lancer une exception invalide d'une fonction avec une spécification d'exception va lancer une
std::bad_exception
- Appeler un
std::function::operator(...)
s'il n'a aucune valeur lancerastd::bad_function_call
. - L'utilisation de
typeinfo
d'un pointeur null peut générer unstd::bad_typeid
. - L'accès à
weak_ptr
après que la pointe a été libérée lancera unstd::bad_weak_ptr
. - Une utilisation incorrecte de
std::promise/std::future
peut provoquer unstd::future_error
. - (C++ 11) Les fonctions de conversion de chaîne
std::stoi
,std::stol
,std::stoll
,std::stoul
,std::stoull
,std::stof
,std::stod
etstd::stold
peuvent jeter à la foisstd::invalid_argument
etstd::out_of_range
. Dans la famille regex, les constructeurs et les méthodes d'assignation peuvent lancerstd::regex_error
.
(je fais cette réponse CW, donc si quelqu'un peut penser plus que tel, s'il vous plaît ne hésitez pas à les ajouter ici.)
En outre, pour la 3ème édition de Le langage C++ de programmation, Bjarne Stroustrup a un appendix about exception safety téléchargeable, qui pourrait être pertinent.
+1 pour le lien. Je viens de commencer à le lire. –
Merci pour votre réponse. Au fait, quelle est la réponse de CW? – Brian
@Brian: C'est "wiki de communauté". D'autres sont libres d'éditer n'importe quelle réponse CW (même quand ils n'ont pas le représentant pour éditer les réponses normalement). – sbi
Les seules fonctions garanties (par le compilateur) de ne pas lancer des fonctions qui ont la spécification d'exception throw()
, comme ceci:
void ThisFunctionNeverThrows() throw()
{
}
Sinon, toute autre fonction peut potentiellement lancer une exception, à moins d'être documenté autrement. Vous devez prendre en compte la sécurité des exceptions lors de l'écriture de code en présence d'exceptions. Voir l'article de Bjarne Stroustup sur la sécurité des exceptions et la bibliothèque standard: http://www2.research.att.com/~bs/3rd_safe.pdf À partir de la page 19 du PDF, vous trouverez des informations sur les garanties offertes par les conteneurs standards.
Ceci n'est pas correct car de nombreux conteneurs, par ex. garantie de ne pas lancer 'erase()', mais cette fonction n'est pas 'throw()'. Du point de vue de la langue, ce que vous avez écrit a du sens, mais il y a des garanties autres que celles spécifiquement imposées par le compilateur. – doublep
@doublep: 'erase()' * will * throw si le constructeur de la copie du type d'élément se lance. – kennytm
A partir de la page 21 du PDF que j'ai mentionné (Garanties pour 'vector' et' deque'): "A moins d'être lancé par le constructeur de copie ou l'opérateur d'affectation du type d'élément, aucun' erase() 'ne déclenche une exception." –
- 1. versions de la bibliothèque standard C++
- 2. Case d'angle de bibliothèque standard C
- 3. Bibliothèque Matrix Standard
- 4. Vous ne pouvez pas push_front() une liste de bibliothèque standard avec mes objets en C++
- 5. standard F90 Bibliothèque pour Makefile
- 6. Quelle est la différence entre la bibliothèque standard et la bibliothèque de modèles standard?
- 7. Calltree pour le programme c + + à la bibliothèque standard
- 8. Jeu de documentation Xcode pour la bibliothèque standard C++
- 9. liste individuellement liée dans la bibliothèque standard C++ ou d'autres bibliothèques largement utilisées?
- 10. Bibliothèque standard JavaScript pour V8
- 11. déclaration C à partir du signal bibliothèque standard
- 12. Objective-C dispose-t-il d'une bibliothèque standard?
- 13. Référence complète en ligne pour la bibliothèque standard C?
- 14. Liste standard de réfrences ActiveXObject
- 15. Importation de toute la bibliothèque standard Python
- 16. Fichier source de la bibliothèque standard
- 17. La bibliothèque standard Python est-elle vraiment standard?
- 18. C bibliothèques non-standard
- 19. Quelle est la différence entre la bibliothèque C et la bibliothèque standard?
- 20. WPF est une bibliothèque standard ECMA?
- 21. Programmation Web Python avec la bibliothèque standard
- 22. Les avertissements de bibliothèque standard sont-ils normaux?
- 23. Déviation standard de la liste générique?
- 24. Threads asynchrones en standard C++
- 25. La question standard C++
- 26. C# double standard?
- 27. C++ toupper - fonction standard?
- 28. délégués standard en C#
- 29. C++ standard api
- 30. Existe-t-il une bibliothèque de pool de connexion mysql standard pour C?
En relation: http://stackoverflow.com/questions/11938979/what-exception-classes-are-in-the-standard-c-library –