最近我遇到了一个问题,创建stringstream
时犯了错,因为我错误地假设std::setw()
会影响每个插入操作的stringstream
,直到我明确更改它。然而,在插入后它总是未设置。
// 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)似乎没有清楚地显示这一点。