STL Exceptions
-
Hoi,
gibt es in der STL einen Exception Typ für "die Funktion hat falsche Parameter erhalten". Quasi sowas:
float sqrt(int value) { if(value < 0) throw stl::bad_arguments(); /* ... */ }
Oder muss ich mir das selber bauen?
-
Such dir einen passenden raus:
http://www.kharchi.de/cppratgeber3.htm#3.3_Standard_Exceptions
-
Da passt assert aber besser.
-
assert geht doch nur im debug-modus, oder?
-
normalerweise schon ja. und ich find ne exception irgendwie schicker. wenns nur darum geht, ob nen wert kleiner als 0 ist, kann man vor aufruf ja noch ne kleine überprüfung machen. aber wenns aufwendigere methoden werden, dann wird die überprüfung von nutzereingaben etc. drastisch aufwendiger. mit ner anständigen illegal_argument (oder wie die auch immer heisst) exception kann man als entwickler jeden x-beliebigen wert reinballen, die exception fangen und sein alternativprogramm fahren.
-
Die "illegal_argument" Exception heisst std::invalid_argument.
Ich verwende allerdings bei sowas auch eher assert() - macht schliesslich keinen Sinn an 1000 Stellen zu prüfen ob auch alle Parameter OK sind - verschlingt nur sinnlos Rechenzeit.
-
aus meiner sicht hängt es davon ab, was die funktion machen soll.
ich persönlich bin ein feind von prüfungen vor dem funktionsaufruf, da man dort gerne etwas vergisst oder die prüfung generell verschlampt, daher ist eine exception in der funktion für mich die sinnvollste prüfung der argumente. allerdings gilt dieses nur, wenn es nicht performance-kritisch ist bzw. deutlich als ungeprüft gekennzeichnet ist, wie bsp der operator[].
-
also mal ganz ehrlich; 95% aller anwendungen holt sich eh alle daten aus ner datenbank und der zugriff ist um faktor 1000 langsamer als jeglicher funktionsaufruf.
ne exception ist anständig zu behandeln und sorgt für einfach verständlichen und wartbaren code. glaub eh, dass der performance wahn ne c krankheit ist :p
-
Muss ich zum benutzen von assert() selber NDEBUG definieren oder macht das mein Compiler (VS 2005) automatisch wenn ich im jeweiligen Kompiliermodus (DEBUG/RELEASE) bin?
-
VS 2005 macht das insofern "automatisch" als dass bei neuen Projekten entsprechende Einträge in der "Debug" Konfiguration gemacht werden.