Was bedeutet: 0 werfen? Ist es schlimm"?

8

Kontext

Ich stieß auf einen Code wie diesen:

%Vor%

Ich habe ein wenig gegoogelt und ein paar andere Code-Snippets gefunden, die dieses seltsam aussehende throw 0 -Form verwenden.

Ich nehme an, man würde dies als:

verstehen %Vor%

Oder ist das ein NULL ptr? gefangen werden als void* ?

Frage

Was macht throw 0 ? Ist es in irgendeiner Weise besonders?

Meine normale Vorliebe wäre, etwas zu werfen, das std::exception ist (oder davon abgeleitet ist). Für mich sieht das also "schlecht" aus. Ist es "schlecht"?

    
MartinP 13.04.2010, 10:14
quelle

3 Antworten

15

Im Allgemeinen kann throw jeden beliebigen Typ werfen, den Sie benötigen, um ihn mit diesem Typ oder seinem Basistyp zu fangen.

Technisch gesehen ist es also legaler Code, aber ...

Es ist schlechter Code: Sie sollten Ihre Ausnahmen immer von std::exception oder zumindest von einer Klasse ableiten, die einige nützliche Informationen über den Fehler und nicht über die reine Zahl liefert. Aber das Ableiten von std::exception ist der korrekte Weg, weil es erlaubt, den obersten catch(std::exception const &e) zu verwenden und mindestens einige Informationen über den Fehler zu erhalten.

    
Artyom 13.04.2010, 10:17
quelle
4

Es ist nicht besonders, Sie können Int nur als eine Ausnahmeklasse angeben.

Es wird als ein schlechter Stil betrachtet, weil eine Ausnahmeklasse mehr darüber erzählen kann, was tatsächlich passiert ist.

    
Pavel Radzivilovsky 13.04.2010 10:15
quelle
2

Es ist ein Int. Es ist "schlecht", da das Auslösen von 0 den Code unlesbar macht oder darauf hinweist, dass jemand Ausnahmen als wertverursachendes System verwendet. (Es ist im Grunde das gleiche Problem wie eine magische Zahl innerhalb des Codes)

NULL ist definiert als ((void *)0) . Wenn der Compiler eine 0 sieht, bedeutet das einen int. Es kann automatisch auf etwas anderes übertragen werden, aber nur, wenn es einen Grund gibt (z. B. Zuweisung zu verdoppeln). Die Zeile throw 0 gibt keinen solchen Grund, also wird ein int geworfen.

    
Shiroko 13.04.2010 10:18
quelle

Tags und Links