4 votes

Spécification des exceptions C++ pour la surcharge de l'opérateur iostream

Il n'est pas précisé si l'appel à ostream opérateur<< peut échouer ou lancer une exception et je n'ai jamais rencontré cela.

  1. Y a-t-il un cas où ostream opérateur<< pourrait échouer ?
  2. Si non, pourquoi la norme ne met pas noexcept à ces surcharges ?
  3. La surcharge suivante est-elle valable ? bonne pratique ? couramment utilisée ?
  4. Même question pour opérateur istream>> ?

    struct MyClass { int data; // I/O operators with noexcept specifier friend std::istream& operator>>(std::istream &in, MyClass &obj) noexcept; friend std::ostream& operator<<(std::ostream &out, const MyClass &obj) noexcept; };

8voto

NathanOliver Points 10062

La raison pour laquelle aucun des operator >> y operator << sont marqués comme noexcept c'est à cause de std::basic_ios::exceptions . Cette fonction membre est présente dans tous les objets qui héritent de std::basic_ios et vous permet de configurer le flux pour qu'il lève des exceptions pour certains modes d'échec. Si les opérateurs sont noexcept alors vous ne pourriez pas les utiliser avec un flux qui a des exceptions définies.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X