std::string exception
-
Guten,
bis jetzt habe ich eigentlich alles in C gemacht, versuche mich aber gerade mal etwas mit C++
Bin also eher ein C++ Anfänger - also nicht gleich zerreißen falls das was ich hier versuche dumm istFolgendes klappt ohne probleme:
class MyClass { public: int div(int a, int b) { std::string e = "Div durch 0!"; if (a == 0) throw e; return b / a; } }; .. try.. catch (std::string e) ..
Das funktioniert aber nicht mehr: (Compiliert Fehlerfrei - aber stürzt ab)
class MyClass { public: int div(int a, int b) { if (a == 0) throw "Div durch 0!"; return b / a; } }; .. try.. catch (std::string e) ..
Warum?
-
Das Literal "Div durch 0!" erzeugt kein String-Objekt, sondern einen char Zeiger.
-
Selbstverständlich, allerdings frage ich mich dann warum
std::string test = "test";
funktioniert? Ich meine, hier wird doch auch einem String Objekt ein char* zugewiesen?
-
Weil std::string einen Konstruktor hat, der einen char* nimmt.
-
Machs lieber so:
//..... throw(std::exception("Div durch 0"); //..... catch (std::exception& e) { cout << e.what() << end; }
-
Müsste der Aufruf dann nicht
std::string test("test");
oder so sein?
-
Nur wenn der Konstruktor explicit ist, ansonsten kann man auch = schreiben.
-
std::string test("test"); test = "konst"; test = "noch mal eine neuer konstruktor?";
Wie muss ich mir das vorstellen? Da wird dann jedes mal der Konstruktor aufgerufen?
@exception e
Ok, das werd ich denn mal nutzen..
-
Nein.
std::string a = "123"; // const char* Konstruktor std::string b("456"); // Auch const char* Konstruktor a = "789"; // operator = a = b; // operator =
-
Ja also kann man dem Typ std::string via = Operator einen char* zuweisen und wie durch Zauberhand erhält std::string dann den String..
Warum kann man denn dann keinen char* werfen und mit std::string einfangen?
Finde ich irgendwie komisch.. aber na gut.. Problem ist ja geklärt^^
-
Das ist keine Spezialität von
std::string
sondern von c++. Nennt sich Konvertierungskonstruktor. Du kannst ja mal danach suchen.