为什么
#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'修饰符'在流上持久存在,直到它们被明确更改/重置。我有一堆数字,我需要打印一个特定的前缀,以便所有字段的宽度相等;每次打印时我应该重新应用修改器吗?看起来效率不高。
答案 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:是的。