Wieso kann man in C++ keine Strings mit Ints verknüpfen?
-
groovemaster schrieb:
Ein separater Operator für Konkatenation wäre natürlich am besten, nur sehe ich da keinen, der in Frage kommt. Siehst du einen?
Ich hatte ganz vergessen, dass '~' schon vergeben ist

der denker schrieb:
Naja, nachdenklich macht mich das schon. Wieso sind String und String-Streams in sperate Klassen unterteilt?
Eine kombinierte Klasse würde die meisten Probleme die hier angesprochen wurden doch gut lösen?Denk z.B. an die ofstream-Klasse, wenn du dort ein Objekt rein-streamst, wird es anders behandelt als bei einem stringstream.
-
der denker schrieb:
Naja, nachdenklich macht mich das schon. Wieso sind String und String-Streams in sperate Klassen unterteilt?
Eine kombinierte Klasse würde die meisten Probleme die hier angesprochen wurden doch gut lösen?std::stringstream ist doch die Kombination aus std::string und den Streamklassen.
-
Ich kann aber nicht gleichzeitig die Funktionalität des Strings und des Streams nutzen.
-
Doch.
Du kannst dem Stream jederzeit mit
std::stringstream::str(std::string MyString)einen String zuweisen.
-
Nein, das meine ich nicht.
Ich kann aus einem StringStream nur den String holen, nicht aber sofort damit arbeiten, d.h. zB. c_str() auf den StringStream aufrufen.
-
C++ ist perfeckt. Ich weiß gar nicht was es da noch zu disktutieren gibt.
-
..... schrieb:
Nein, das meine ich nicht.
Ich kann aus einem StringStream nur den String holen, nicht aber sofort damit arbeiten, d.h. zB. c_str() auf den StringStream aufrufen.Und was soll so schlimm daran sein? Schreib doch einfach:
std::stringstream MyStream; MyStream.str().c_str();????????? schrieb:
C++ ist perfeckt. Ich weiß gar nicht was es da noch zu disktutieren gibt.
Dein "perfeckt" sagt ja wohl schon alles aus...

-
Das ist natürlich ein Punkt! Dann könnte man ja theoretisch immer nur mit StringStreams arbeiten. Hat das Nachteile oder gibt es Gründe, wieso man darauf verzichten sollte, immer StringStreams statt Strings zu verwenden?
-
Ich kann "der denker" aber schon verstehen. Ich denke, er hätte gerne sowas:
std::string s; s << 10 << "Hallo " << setprecision(3) << 1.234567 << endl;
-
Nimm boost::format.
-
Badestrand schrieb:
Ich kann "der denker" aber schon verstehen. Ich denke, er hätte gerne sowas:
std::string s; s << 10 << "Hallo " << setprecision(3) << 1.234567 << endl;Kann man dazu den << Operator nicht überladen?
-
man könnte einfach immer auf stringstreams setzen! spricht da jetzt was dagegen oder nicht?
mir fällt jedenfalls nichts ein!
-
Bashar schrieb:
groovemaster schrieb:
'~' ist immerhin auch der Operator für bitweise Negierung.
Nein, das ist der unäre Operator.
Und nachts ist es kälter als draussen.
Ob unär oder nicht ist bezugslos zu meiner Aussage. '~' ist und bleibt ein Operator.
-
Nexus schrieb:
Badestrand schrieb:
Ich kann "der denker" aber schon verstehen. Ich denke, er hätte gerne sowas:
std::string s; s << 10 << "Hallo " << setprecision(3) << 1.234567 << endl;Kann man dazu den << Operator nicht überladen?
Klar kann man das, will man aber nicht
Es wäre halt schön (habe jetzt aber auch nicht alle Konsequenzen bedacht), wenn sowas im Standard-Krams wäre.der streamer schrieb:
man könnte einfach immer auf stringstreams setzen! spricht da jetzt was dagegen oder nicht?
mir fällt jedenfalls nichts ein!Ne, ist nicht praktikabel, einer der Gründe:
void foo( std::stringstream& s ); std::stringstream a("Hallo"), b("Welt"); foo( a + b ); //<- kompiliert nicht
-
lass mich mal überlegen..
void foo( std::string& s ); std::string a("Hallo"), b("Welt"); foo( a + b );das wäre ja sonst das äquivalent dazu, ich erzeuge mir also einen temporären string aus a und b.
dann müsste doch theoretisch auch das hier funktionieren:void foo( std::stringstream& s ); std::stringstream a("Hallo"), b("Welt"); foo( a.str() + b.str() );
-
groovemaster schrieb:
Bashar schrieb:
groovemaster schrieb:
'~' ist immerhin auch der Operator für bitweise Negierung.
Nein, das ist der unäre Operator.
Und nachts ist es kälter als draussen.
Ob unär oder nicht ist bezugslos zu meiner Aussage. '~' ist und bleibt ein Operator.Aber du hast schon verstanden, was ich ausdrücken will?
-
groovemaster schrieb:
Bashar schrieb:
groovemaster schrieb:
'~' ist immerhin auch der Operator für bitweise Negierung.
Nein, das ist der unäre Operator.
Und nachts ist es kälter als draussen.
Ob unär oder nicht ist bezugslos zu meiner Aussage. '~' ist und bleibt ein Operator.Bezugslos ist es nicht unbedingt, aber irrelevant. Ein Negationsoperator ist immer unär, gleich wie ! oder - (Vorzeichen). Das hat nichts damit zu tun, dass ~ bitweise wirkt. Unär bedeutet hier nur, dass der Operator nur einen Operand benötigt.
der streamer schrieb:
dann müsste doch theoretisch auch das hier funktionieren:
void foo( std::stringstream& s ); std::stringstream a("Hallo"), b("Welt"); foo( a.str() + b.str() );Nein, da du der Funktion einen
std::stringübergibst. Der Parametertyp ist aberstd::stringstream&.
-
der streamer schrieb:
dann müsste doch theoretisch auch das hier funktionieren:
void foo( std::stringstream& s ); std::stringstream a("Hallo"), b("Welt"); foo( a.str() + b.str() );Das Argument von foo muss noch const sein, aber das meintest du ja wahrscheinlich auch. Ich krieg's dann aber nur so
foo( std::stringstream( a.str() + b.str() ) );hin, schön ist was anderes
Naja, aber sonst fällt mir kein Argument mehr ein gegen "immer stringstream". Hm.
-
Ja, das habe ich übersehen. Schön ist das wirklich nicht, aber dafür hat man paar andere Vorteile.
-
[Naja . war bestimmt sowieso nur Trollerei ... aber da will ich mal nicht so sein, weil ich gerade gute Laune habe.]
Es nervt! schrieb:
...
Warum geht das nicht? ...Vielleicht, weil ein int eben kein string ist ?
Ich bin ehrlich gesagt sehr froh, dass in C++ ein string ein string, ein int ein int und ein stream ein stream ist. Alles andere macht einen nämlich ganz schnell wahnsinnig (natürlich nicht, wenn man sowieso nur 20-Zeilen-Clickibunti-Programe schreibt)
...und erst Recht bin ich froh, dass weder string noch int eine Sonderrolle haben, sondern sich eben genauso verhalten wie andere Typen.BTW: Geht das
str += val;in Java wirklich ? Würde mich doch mangels "überladbarer" operatoren sehr wundern.
Gruß,
Simon2.