Używam obszernie std::stringstream
do generowania kodu. Podczas ustawiania treści przy pomocy funkcji str()
napotkam pewne wątpliwe zachowanie, a następnie używam operator<<
. Czy ktoś może mi wyjaśnić to zachowanie? Byłbym bardzo wdzięczny - dzięki.Ustawienie zawartości std :: stringstream z str (const char *) ma dziwne konsekwencje
Przykład pierwszy:
std::stringstream ssa;
ssa.str("Setting string");
std::cout << ssa.str() << std::endl;
ssa << " adding to string";
std::cout << ssa.str() << std::endl;
wyjściowa:
Ustawienie ciąg
dodając ciąg
spodziewanych:
Ustawienie ciąg
Ustawianie ciąg dodając ciąg
Więc po kawałku czytania na dokumentacji znalazłem, że należy ustawić tryb otwarty do ios_base::ate
:
std::stringstream ssb(std::ios_base::ate);
ssb.str("Setting string");
std::cout << ssb.str() << std::endl;
ssb << " adding to string";
std::cout << ssb.str() << std::endl;
Output :
Łańcuch ustawień
Ustawienie ciąg
Again (lub teraz) spodziewałbym:
Ustawienie ciąg
Ustawienie ciąg dodając ciąg
Dlaczego otrzymuję wyników I jestem i jak mogę uzyskać pożądany rezultat? E.i. Czy można ustawić początkowe string
z stringstream
i dołączyć do tego string
?
Mam świadomość, że mogę po prostu ustawić zawartość na pustą string("")
, a następnie użyć tylko <<operator
. Jest to w rzeczywistości obejście, którego używam. Po prostu nie rozumiem zaobserwowanego zachowania. A obejście to sprawia, że mój kod jest bardziej brudny.
Na drugim, albo zrobić 'std :: ios_base :: out | std :: ios_base :: ate' lub użyj 'ostringstream'. –