最近,我被ios_base::width和/或setw操作器必须是reset with every item written to the stream困扰。

也就是说,您必须执行以下操作:

while(whatever)
{
    mystream << std::setw(2) << myval;
}

而不是这样:
mystream.width(2);
while(whatever)
{
    mystream << myval;
}

好的。

但是有人知道为什么要做出这个设计决定吗?
我是否缺少一些理由,或者这仅仅是标准的一个黑暗角落?

其他流格式修饰符(如链接的SO问题中所述)为“粘性”,而setw不是。

最佳答案

我的看法是:如果您希望将其统一应用,则始终可以执行以下操作。

int width =2;
while(whatever)
{
    mystream << std::setw(width) << myval;
}

但是如果您提到它很粘,那么:
mystream.width(2);
while(whatever)
{
    mystream << myval;
}

如果我想要每行不同的宽度,我必须保持设置宽度。

因此,基本上两种方法几乎都是相同的,根据我现在在做什么,我希望还是不喜欢它们。

关于c++ - setw()有什么用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5905467/

10-13 07:09