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


資料競爭

修改流物件。
併發訪問同一個流物件可能導致資料爭用。

異常安全

基本保證:如果丟擲異常,流處於有效狀態。

另見