最近我被以下事实困扰:ios_base::width
和/或setw
操纵器必须在向流写入每个项目时重置。
也就是说,您必须这样做:
while(whatever)
{
mystream << std::setw(2) << myval;
}
不要这样做:
mystream.width(2);
while(whatever)
{
mystream << myval;
}
好的,没问题。
但是有没有人知道为什么要做出这个设计决策?我是否遗漏了某些理由或者这只是标准中的一个黑暗角落?
与其他流格式修饰符(如链接的SO问题中提到的)不同,setw
不是“粘性的”。