iomanip /固定宽度持久性

时间:2017-09-07 10:31:42

标签: c++

为什么

#include <iostream>
#include <iomanip>

int main()
{
    std::cout << std::fixed << std::setw(4) << std::setprecision(0);
    std::cout << 4;
    std::cout << 4;
}

打印

"   44

(忽略引用,只是为了让格式正确) 而不是

"   4   4

我认为iostream'修饰符'在流上持久存在,直到它们被明确更改/重置。我有一堆数字,我需要打印一个特定的前缀,以便所有字段的宽度相等;每次打印时我应该重新应用修改器吗?看起来效率不高。

1 个答案:

答案 0 :(得分:3)

不幸的是,你已经徘徊在标准的一个区域,这个区域有点过时,似乎没有任何总体设计目标。

这无疑具有历史意义,因为iostreams库AFAIAA原本不是STL的一部分,后者成为标准库。

值得阅读所有std::ios_base成员及相关操纵者的笔记。

例如:

http://en.cppreference.com/w/cpp/io/ios_base/width

  

一些I / O函数在返回之前调用width(0),请参阅std :: setw(这会导致此字段仅影响下一个I / O函数,而不会影响任何后续I / O)

     

此修改器对输入和输出的确切影响在各个I / O函数之间变化,并在每个运算符&lt;&lt;和运算符&gt;&gt;单独过载页面。

预期:

  

但那只是&lt;插入expletive&gt; !!!

A:是的。