Какова цель конструктора строк ostringstream?
В MSVC 2005 у меня есть следующий код.
std::ostringstream stream("initial string ");
stream << 5;
std::cout << stream.str();
Я ожидаю:
initial string 5
Я получаю:
5nitial string
Инициализируя поток строкой, я бы ожидал, что поток переместит свою позицию в конец исходной строки. Очевидно, что STL не согласен со мной (не в первый раз).
Какова цель такого поведения? Является ли этот вариант использования полезным для чего-либо? Кроме того, есть ли способ продвинуть позицию потока до конца исходной строки?
Ответы
Ответ 1
Использование ostringstream
и предоставление начального значения подобно открытию существующего файла для записи. У вас есть данные, и если вы не укажете иное, ваша начальная позиция будет в начале данных. Вы можете искать в данных или указать ios::ate
, чтобы сначала поместить указатель записи в конец существующих данных, или вы можете указать ios::app
, чтобы всегда помещать указатель записи в конец существующих данных.
Ответ 2
Вы можете указать второй (дополнительный) параметр конструктора для установки курсора потока в конце:
std::ostringstream stream("initial string ", std::ios::ate);
Ответ 3
Чтобы достичь цели, сделайте следующее:
stream.seekp(0, ios_base::end);
Что касается позиции записи по умолчанию для фронта, я не знаю.