Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Exception - Spezifikation

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
05.10.2004, 17:40 Uhr
derphilipder



Warum ist denn die Spezifikation sinnlos?
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
05.10.2004, 18:27 Uhr
proga




Zitat von (un)wissender:
Exception-Spezifikation gehört natürlich zum Standard!
Sie ist aber recht sinnlos, höchsten thow() ist zu gebrauchen, als Garantie für das Nichtwerfen von Exceptions.
int funktion(int) throw(Error); ist ok, wie lautet die Fehlermeldung?
Gibt es eine Klasse/Struktur namens Error?


sorry, wenn ich hier falsche Informationen gepostet habe, ich habe das aus
der MSDN


Zitat:

Compiler Warning (level 3) C4290
C++ Exception Specification ignored

A function was declared using exception specification.

At this time the implementation details of exception specification have not been standardized, and are accepted but not implemented in Microsoft Visual C++.

Code compiled with ignored exception specifications may need to be recompiled and linked to be reused in future versions supporting exception specifications.

You can avoid this warning by using the warning pragma:

#pragma warning( disable : 4290 )

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
05.10.2004, 19:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi VC versteht schon exceptions, man muss nur "Manage C++ Exceptions" (oder vergleichbares auf deutsch) in den Projekteinstellungen aktivieren. Ich hatte bis jetzt noch nie probleme mit exceptions zu arbeiten
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
05.10.2004, 22:36 Uhr
(un)wissender
Niveauwart


@derphilipder
Hoha, die Frage habe ich erwartet.
Also in bezug auf Template-Klassen dürfte das klar sein, der Programmierer kennt den Typ nicht, weiß also auch gar nicht was für Exceptions auftreten können.
Für kleine Projekte sind Ex-Spz noch halbweg ok, aber in Großen verliert man sich da schnell.
Performance kosten sie auch noch und du hast im Prinzip nicht viel davon. C++ verpflichtet dich nicht die Exception zu behandeln. Es ist nur ein Hinweis für den Programmier, aber das kann man auch durch Kommentare billiger bekommen. Man muss die Ex-Spez immer Up-to-Date halten, da ansonsten schnell mal abort/terminate aufgerufen werden.
Also, Finger weg, außer von throw(), zur Garantie das keine Exceptions geworfen werden, in speziellen Operation macht das Sinn (swap z.b.)
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
06.10.2004, 10:20 Uhr
virtual
Sexiest Bit alive
(Operator)


@proga
(Deine?) MSDN irrt. Natürlich sind Exception specifiers standardisiert. Seit fast genau 6 Jahren (irgendwann im November 1998 wurde der Standard verabschiedet; ich trank an jenem Tag Champagner, aß Kaviar, frönte diversen Lastern, .... Könnte C++ nicht bald mal wieder standardisiert werden?)

@(un)wissender
Warum kosten Exception Specifier Performance? ICh habe es so verstanden, daß dies eine Sache ist, die zur Compiletime ausgewertet wird...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
06.10.2004, 12:29 Uhr
(un)wissender
Niveauwart


Meiner Meinung ist es nicht möglich zu überprüfen, welche Exceptions geworfen werden können, daher muss zur Laufzeit Code ausgeführt werde, um das zu überprüfen und der kostet dann.
Bspw. müsste der C++-Compiler jeden Code von verwendeten Bibos vorliegen haben, um zur Compilezeit sagen zu können, ob eine Exeption geworfen wird, oder er müsste irgendwie im Objektcode rumfrickeln, was aber der Trennung vom Kompilieren und Linken widerspricht.
Noch was: wenn bspw. IO-Flags zum Exceptionwerfen während der Laufzeit gesetzt werden, wie soll der Compiler zur Compilezeit darauf reagieren? Er kann nicht wissen was passiert und darum kann er es auch nicht überprüfen, sondern muss Extra-Code einfügen.
Etwas anderes wäre es, wenn throw behandelt werden müsste, wie in Java, aber dem ist nunmal nicht so.
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 06.10.2004 um 12:31 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
06.10.2004, 13:23 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja, aber wie soll denn zur Laufzeit zB die Klasse einer Exception bestimmt werden? - Irgendwie mittels RTTI oder dynamic_cast? - Nee, das geht nicht, weil das nur dann funktionieren würde, wenn die Exceptionklasse (kann ja auch ein char*, ein int oder was auch immer sein) eine VMT hat...

Ich denke, daß das in C++ genau wie in Java zur CompileZeit ausgewertet wird.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
06.10.2004, 13:39 Uhr
(un)wissender
Niveauwart


Ich behauptet, dass das in C++ unmöglich ist. Meyers und Sutter haben auch geschreiben, dass das Performanz kostet, und wenn die das sagen, dann glaube ich das erstmal. Obiges habe ich mir selber zusammengereimt, aber ich denke schon, dass das zumindest ungefähr passt.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
06.10.2004, 14:01 Uhr
(un)wissender
Niveauwart


Dazu:


Zitat von got/082:

The idea of exception specifications is to do a run-time check[...]


www.gotw.ca/gotw/082.htm

und


Zitat von gotw/publications:

Enforce at runtime that functions will only throw listed exceptions (possibly none).


www.gotw.ca/publications/mill22.htm
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 06.10.2004 um 14:02 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
06.10.2004, 14:32 Uhr
virtual
Sexiest Bit alive
(Operator)


Jau hast recht.

ich hätte nicht gedacht, daß da noch was zur Runtime passiert. Zumindest mache ich aber eines wohl doch richtig: ich benutze den Kram einfach nicht. Und die Artikel vom Sutter zeigen auch recht deutlich, was für ein Bullshit das ist.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: