Was bedeutet das throw an dieser Stelle?
-
#include <iostream> #include <conio.h> using namespace std; class Test { public: int x; void Bla(int y); }; void Test::Bla(int y) throw() { cout<<"x + y = "<<x+y<<endl; } int main() { Test t; t.x = 5; t.Bla(3); getch(); return 0; }Ja die Frage ist ja schon im Titel. Was macht dieses throw an dieser Stelle?
Vielen dank im Voraus
mfg
-
Es bedeutet, dass die Funktion eine Exception werfen könnte.
-
Ne, in dem Fall bedeutet es gerade dass die Funktion keine Exception wirft.
-
Öhm, nicht das es KEINE werfen wird?
-
... dass unexpected() aufgerufen wird, wenn sie etwas wirft !

Gruß,
Simon2.
-
@Mathias: Da fehlt ein "k" in deiner Aussage

@Unverständniss (das schreibt man übrigens mit einem s):
Diese Angabethrow(...)hinter dem Funktionskopf ist ein throw-Spezifizierer. In der Klammer werden die möglichen Exceptions aufgelistet, die diese Funktion werfen "darf"*. Wenn diese Liste leer ist, sichert die Funktion zu, NIE eine Exception werfen zu wollen.* Was die Funktion tatsächlich macht, wird erst zur Laufzeit überprüft. Wenn du die throw-Spezifikation verletzt, wird typsicherweise unexpected() aufgerufen. Das versucht zunächst, eine bad_exception Exception zu werfen - wenn die auch nicht in die Spezifikation passt, verabschiedet sich dein Programm.
-
OK Danke für die schnelle Hilfe!
@CStoll: Ich habe das zweite s entfernt

-
Eins meiner schlauen Bücher sagt allerdings, dass man diese Notation nicht verwenden sollte, da sie quasi keinen Vorteil bring (unexpected() beendet standardmäßig einfach das ganze Programm) und außerdem das Programm langsamer macht, weil praktisch nur ein catch(...)-Block um die Funktion gelegt wird, der unexpected() aufruft, wenn eine Exception gefangen wird...
Felix
-
Hi,
na ein Vorteil kann sein, dass Dir dieser Fall als Fehler (wenigstens zur Laufzeit auffällt).
Ich persönlich bin zwar kein Freund von exception-specs, aber dass ein throw() prinzipiell sinnlos wäre, leuchtet mir nicht ein.Gruß,
Simon2.