Wie wird >> für string gemacht?
-
Ich bastle mir mein eigenes string und bin beim denken wie >> zu implementieren. Soweit hab ich das:
inline istream& operator >> (istream& i, string& x) { char c; while (i.get(c) && std::isspace(c)); if (!i) return i; x.clear(); x += c; while (i.get(c) && !std::isspace(c)) x += c; return i; }Ob das das korrektes Benehmen eines strings ist, weiß ich nicht.
-
Irgendjemand?

-
Wie du >> überlädst ist dir überlassen. Ob das raus kommt, was du willst kannst du selbst prüfen.
-
Ich denke auch, dass,wenn es das macht, was du willst, dann ist es richtig.
- Die Funktionalität der Standard Strings bekommst du (sehr wahrscheinlich) eh nicht hin.Ein paar Sachen haben mich noch stutzig gemacht.
inline istream& operator >> (istream& i, string& x) { if (!i) return i; // Würde das hier nicht mehr Sinn machen? char c; while (i.get(c) && !std::isspace(c)); //Ist das nicht auch hier so? //while (i.get(c) && std::isspace(c)); //if (!i) return i; x.clear(); x += c; while (i.get(c) && !std::isspace(c)) x += c; return i; }
-
Die Funktionalität ist eigentlich korrekt, man kann es aber noch ein wenig optimieren

inline istream& operator >> (istream& i, string& x) { //sentry übernimmt das aufräumen istream::sentry sentry(i); if(!sentry) return i; x.clear(); //whitespaces sollten mit der aktuellen streamlocale gecheckt werden //desweiteren sollten für i.width!=0 nur maximal i.width zeichen gelesen werden std::size_t max=i.width()!=0?i.width():x.max_size(); std::size_t i=0; while (i.get(c) && !std::isspace(c,i.getloc()) && i!=max) { x += c; ++i; } return i; }