Was bring throw() hinter einer Funktion
-
Hi,
mit throw hinter einer Funktion oder Methode kann man
ja festlegen, ob eine Funktion/Methode Exceptions schmeißen darf und wenn ja
welche.Nun habe ich eine Frage?
- Warum wird nicht schon zur CompileTime geprüft ob Verstöße vorliegen?
Ich weiß, dass man throw nicht benutzen muss und somit nicht genau festeht,
ob eine Exception geworfen wird, aber offensichtliche Fehler können doch gemeldet
werden.Bsp:
void foo( void ) throw( char ) { throw( 123 ); // der Compiler kann wissen, dass es falsch ist }
-
Ulko schrieb:
...
Ganz davon abgesehen das 123 ein gültiger char-Wert sein kann (auch wenn er standardmäßig als int interpretiert wird), gab es zu diesem Thema erst kürzlich mehrere Diskussionen.
Such entweder selber, oder schau dir einfach mal den folgenden Artikel an.
-
aber offensichtliche Fehler können doch gemeldet
Ist ja kein Fehler, ist legaler Code dessen Verhalten ziemlich genau definiert ist.
Der Grund warum keine Warnings und schon garkeine Fehler ausgegeben werden ist dass eine sinnvolle Analyse nahezu unmöglich wird, dadurch dass man keine Exception-Specs angeben muss, und es kaum eine Library gibt die es tut.
Und nochwas: es gibt zumindest einen wichtigen Compiler der Exception Specs noch nicht vollständig (sprich: so gut wie garnicht) implementiert hat, und das ist MSVC 2005 (2008 kann es AFAIK auch noch nicht - bin ich mir aber nicht sicher, müsste ich erst nochmal nachsehen). MSVC kann Exception Specs parsen und auch ein "throw()" verstehen und dann ein wenig besser optimieren, aber mehr schon nicht. D.h. unexpected() würde in deinem Beispiel NICHT wie vorgeschrieben aufgerufen wenn du das mit MSVC übersetzt.