Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » throw oder nicht throw

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 ]
000
05.09.2003, 13:37 Uhr
~Unwissender
Gast


Hallo!

Ist es besser, wenn eine Funktion keine Exception werfen kann, in der Deklaration/Definition throw() zu verwenden oder sollte man es einfach weglassen?


C++:
void meineFunktion() throw()
{
//Hier Code, der keine Exception werfen kann/soll.
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.09.2003, 16:08 Uhr
virtual
Sexiest Bit alive
(Operator)


Kann man zu stehen wie man will. Nur das Konzept ist durchaus lückenhaft und wird von mir zumindestens nicht angewendet. Wenn es nicht lückenhaft wäre, wäre es eine eindeutige Bereicherung.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 05.09.2003 um 16:09 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.09.2003, 17:07 Uhr
~Unwissender
Gast


Ja, das mit "eindeutige Bereicherung" dachte ich mir auch, vor allem weil es eigentlich auch Compileroptimierungen ermöglichen sollte (Exceptioncode sparen).

Warum ist das Konzept den "lückenhaft"? Und auf welches "Konzept" beziehst du dich?

Gruß und Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.09.2003, 17:41 Uhr
virtual
Sexiest Bit alive
(Operator)


Naja, probier doch einfachmal

C++:
char* f() throw()
{
    return new char[1000];
}


Kein Compiler meckert und das, obwohl new jederzeit eine bad_alloc Exception werfen könnte. Das nenne ich Lückenhaft, weil die Funktion f suggeriert, daß es keine Exception rausläßt.
--
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
004
05.09.2003, 19:26 Uhr
~Unwissender
Gast


Richtig, aber ich glaube, dann wird unexpected() aufgerufen, wenn throw()-Methoden doch eine Exception werfen.

Wie so oft in C++ liegt hier die Weisheit beim Programmierer zu wissen, ob tatsächliche keine Exception auftreten kann.

Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.09.2003, 23:48 Uhr
~StefanD
Gast


Ich habe mal versucht, das für ein relativ kleines Projekt konsequent durchzuziehen. Und herausgefunden, daß es einfach nicht praktikabel ist! Vor allem, wenn sich die Klassen/Methoden noch heftig in der Entwicklung befinden, verbringt man mehr Zeit damit, die throw-Deklarationen zu aktualisieren als mit der eigentlichen Arbeit. Eine Methode wirft plötzlich einen Fehler mehr. Also aktualisierst du die Deklaration der Methode, dann die aller Methoden, die diese Methode aufrufen, dann alle Deklarationen der Methoden, die wiederum diese Methoden aufrufen.......

Fazit: Obwohl ich eigentlich sehr auf saubere Arbeit stehe, lasse ich von throw-Deklarationen die Finger.


Stefan.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.09.2003, 00:08 Uhr
~Unwissender
Gast


Hm, kann ich mir vorstellen, in Java hat die throws-Klausur nocht die zusätzliche Beutung, das man die spezifizierte Exception dann fangen muss.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.09.2003, 08:11 Uhr
~StefanD
Gast



Zitat:
~Unwissender postete
Hm, kann ich mir vorstellen, in Java hat die throws-Klausur nocht die zusätzliche Beutung, das man die spezifizierte Exception dann fangen muss.

Oder weiterreichen, wenn ich mich nicht irre. So ist es in C++ ja auch. Nur wird ein Fehler, der aus den Tiefen des Programms kommt meist ziemlich weit weitergereicht, bevor er dann gefangen wird.


Stefan.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.09.2003, 09:09 Uhr
~Unwissender
Gast


Korrektur: es muss heißen Bedeutung und nicht Beutung :-)!

Ich glaube in C++ musst du nicht fangen oder weiterreichen, wenn in der throw-Klausel ein Exception steht, oder?
Ich glaube das ist nur in Java so.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
08.09.2003, 15:48 Uhr
0xdeadbeef
Gott
(Operator)


In Java bedeutet throws so ungefähr das Gegenteil von throw() in C++. Und in Java macht das auch Sinn, zum Beispiel meckert dir der Java-Compiler bei diesem Code:

C++:
public void throw_something() {
  throw new Exception();
}


weil er erwartet, dass du genau angibst, welche Exceptions geschmissen werden können. Also:

C++:
public void throw_something() throws Exception {
  throw new Exception();
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: