Недавно у меня возникла проблема с созданием строкового потока из-за того, что я неправильно предположил, что std:: setw() повлияет на строковый поток для каждой вставки, пока я не изменю его явно. Тем не менее, он всегда отключается после вставки.
// With timestruct with value of 'Oct 7 9:04 AM'
std::stringstream ss;
ss.fill('0'); ss.setf(ios::right, ios::adjustfield);
ss << setw(2) << timestruct.tm_mday;
ss << timestruct.tm_hour;
ss << timestruct.tm_min;
std::string filingTime = ss.str(); // BAD: '0794'
Итак, у меня есть ряд вопросов:
- Почему setw() таким образом?
- Есть ли другие манипуляторы таким образом?
- Есть ли разница в поведении между std:: ios_base:: width() и std:: setw()?
- Наконец, есть онлайн-ссылка, которая четко документирует это поведение? Моя документация поставщика (MS Visual Studio 2005), похоже, не показывает это явно.