什么是ios::adjustfield
,它做了什么?何时以及如何使用它?
ios::adjustfield
是一个有点面具,通过OR'ing在一起ios::left
,ios::right
和ios::internal
。后三者是控制输出调整的标志。 This page有一个很好的例子,说明这三个标志的作用。
尽管设置ios::adjustfield
本身没有多大意义 - 在任何给定时间设置三个调整标志中的一个以上没有任何意义。那么为什么标准库提供它呢?
答案是让清除现有的调整标志变得容易。如果flg
是当前的格式化标志集,则不能简单地通过ios::right
设置flg |= ios::right;
,因为如果已经设置了不同的调整标志,则只需同时设置两个调整标志,这是无意义的。
相反,你需要先用flg &= ~ios::adjustfield;
清除当前的调整标志。这样你就可以用flg |= ios::right;
设置另一个调整标志。操作ios::setf()
标志的函数ios
允许你给它一个要清除的标志的掩码。
请注意,您通常不需要直接使用ios::adjustfield
; I / O操纵器std::left
,std::right
和std::internal
更方便。