public member function
<ios> <iostream>

std::ios_base::setf

set (1)
fmtflags setf (fmtflags fmtfl);
mask (2)
fmtflags setf (fmtflags fmtfl, fmtflags mask);
设置特定的格式标志
第一个形式(1)设置流的格式标志,这些标志的位在fmtfl中被设置,其余保持不变,如同调用flags(fmtfl|flags())

第二个形式(2)设置流的格式标志,这些标志的位同时在fmtflmask中被设置,并清除mask中设置但不在fmtfl中的标志位,如同调用flags((fmtfl&mask)|(flags()&~mask))

两者都返回调用前流的格式标志的值。

流的格式标志会影响某些输入函数如何解释数据以及某些输出函数如何写入数据。有关此函数参数的可能值,请参阅ios_base::fmtflags

第一个形式的setf(1)通常用于设置独立的格式标志boolalphashowbaseshowpointshowposskipwsunitbufuppercase,这些标志也可以使用成员函数unsetf直接取消设置。

第二个形式(2)通常用于使用字段位掩码作为mask参数来设置选择性标志的值。

fmtfl
格式标志值
mask
字段位掩码
leftrightinternaladjustfield
decocthexbasefield
scientificfixedfloatfield

参数化操作符setiosflags的行为类似于此成员函数的第一种形式(1)

参数

fmtfl
要设置的格式标志。如果使用第二个语法,则只有在fmtflmask中都设置的位才会在流的格式标志中设置;在mask中设置但在fmtfl中未设置的标志将被清除。
mask
包含要修改的标志的掩码。

成员类型fmtflags是位掩码类型(请参阅ios_base::fmtflags)。

返回值

调用前的流中选择的格式标志。

示例

1
2
3
4
5
6
7
8
9
10
11
// modifying flags with setf/unsetf
#include <iostream>     // std::cout, std::ios

int main () {
  std::cout.setf ( std::ios::hex, std::ios::basefield );  // set hex as the basefield
  std::cout.setf ( std::ios::showbase );                  // activate showbase
  std::cout << 100 << '\n';
  std::cout.unsetf ( std::ios::showbase );                // deactivate showbase
  std::cout << 100 << '\n';
  return 0;
}

输出
0x64
64


数据竞争

修改流对象。
并发访问同一个流对象可能导致数据争用。

异常安全

基本保证:如果抛出异常,流处于有效状态。

另见