Я использую 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. Это на самом деле обходной путь, который я использую. Я просто не понимаю наблюдаемого поведения. И обходной путь делает мой код более запутанным.