Я использую std::stringstream
для генерации кода. При настройке содержимого с помощью функции str()
я столкнулся с каким-то сомнительным поведением, а затем с помощью operator<<
. Может кто-нибудь объяснить мне такое поведение. Я был бы очень благодарен за это. Спасибо.
Пример 1:
std::stringstream ssa;
ssa.str("Setting string");
std::cout << ssa.str() << std::endl;
ssa << " adding to string";
std::cout << ssa.str() << std::endl;
Вывод:
Установка строки
добавление в строку
Ожидаемое:
Установка строки
Установка строки добавления в строку
Итак, после небольшого чтения документации я обнаружил, что должен установить открытый режим 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;
Вывод:
Установка строки
Установка строки
Снова (или сейчас) я бы ожидал:
Установка строки
Установка строки добавления в строку
Почему я получаю результаты, которые есть, и как мне получить результат, который я хочу? Э.И. Возможность установить начальный string
параметра stringstream
и добавить к нему string
?
Мне известно, что я могу просто установить содержимое пустым string("")
, а затем использовать только <<operator
. Это на самом деле обходной путь, который я использую. Я просто не понимаю наблюдаемого поведения. И обходной путь делает мой код более запутанным.