namespace cpp

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:lib:unexpected

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

kennen:lib:unexpected [2012-04-11 17:24] (aktuell)
Zeile 1: Zeile 1:
 +====== unexpected() ======
 +''#include <exception>''
 +
 +<code cpp>
 +void unexpected () 
 +</code>
 +Ruft den ''unexpected_handler'' auf.
 +
 +Die Funktion wird aufgerufen, wenn eine Funktion über eine Ausnahme verlassen wird, 
 +die nicht in der [[..:ausnahmen#anmelden|throw-Spezifikation]] der Funktion steht.
 +
 +==== Parameter ====
 +| - | -|
 +==== Ergebnis ====
 +Rückgabewert: keiner.
 +
 +==== Siehe auch ====
 +[[set_unexpected]].
 +
 +
 +==== Beispiel ====
 +<code cpp unexpected.cpp>
 +#include <exception>
 +#include <iostream>
 +
 +void notstand()
 +{
 +  std::cerr << "... wird es auch schief gehen.\n";
 +  throw std::bad_exception();
 +}
 +
 +class X {};
 +class U {};
 +
 +void harmlos() throw(U)     // wirklich ???
 +{
 +  throw X();
 +}
 +
 +int main()
 +{
 +  std::unexpected_handler old = std::set_unexpected(notstand); 
 +
 +  try
 +  {
 +    std::cout << "Was schiefgehen kann, ..." << std::endl;
 +    harmlos();
 +    // unexpected();
 +  }
 +  catch(bad_exception& )
 +  {
 +    std::cerr << "\t(Murphy's Gesetz)\n";
 +  }
 +  catch(...)
 +  {
 +    std::cerr << "...und zwar anders, als man erwartet.\n";
 +  }
 +  return 0;
 +}
 +// Bugs ???:
 +// minGW g++ 2.95 : ...wird schief gehen, danach
 +                    abnormal program termination () 
 +//                  (exception handling in experimental stage)
 +// M$ VC++ 6.0 : ignoriert throw-Deklaration, fängt X-Ausnahme ab
 +</code>
  
kennen/lib/unexpected.txt · Zuletzt geändert: 2012-04-11 17:24 (Externe Bearbeitung)