C++ quiz and strstream

C++ quiz and strstream

Danila Kutenin

Казалось бы, мы проинициализировали stream строкой "a" и сначала выведем "a", потом добавим к стриму "b" и выведем "ab" и в итоге должно быть "aab", но нет.

stringstream содержит в себе позицию буффера. И при дефолтном конструкторе от строки, он будет нулём.

operator<< перезаписывает следующую позицию в буффере и поэтому во втором cout выведется b

Чтобы это починить, можно написать так:

std::stringstream ss("a", std::ios_base::out|std::ios_base::ate);

Поэтому многими стайлгайдами запрещено использование stringstream.

https://en.cppreference.com/w/cpp/io/basic_stringstream/basic_stringstream

https://en.cppreference.com/w/cpp/io/ios_base/openmode

Report Page