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)