分享方式:


ios_base 類別

類別描述不相依於範本參數的輸入和輸出數據流通用的記憶體和成員函式。 (類別範本 basic_ios 描述什麼是通用的,而且相依於範本參數。

類別 ios_base 的 物件會儲存格式資訊,其中包含:

  • 在型 fmtflags別的物件中格式化旗標。

  • iostate別 物件中的例外狀況遮罩。

  • int別 物件中的欄位寬度。

  • int 類型物件中的顯示精確度。

  • locale型別locale物件中的物件。

  • 兩個可延伸陣列,具有類型和longvoid指標的專案。

類別的物件 ios_base 也會將數據流狀態資訊儲存在 型 iostate別 的物件和回呼堆疊中。

成員

建構函式

名稱 描述
ios_base 建構 ios_base 物件。

Typedefs

名稱 描述
event_callback 描述傳遞至 register_call的函式。
fmtflags 指定輸出外觀的常數。
iostate 定義描述資料流狀態的常數。
openmode 描述如何與資料流互動。
seekdir 指定位移作業的起點。

列舉

名稱 描述
event 指定事件類型。

常數

名稱 描述
adjustfield 定義為internalleft | | right的位掩碼。
app 指定在每次插入之前搜尋到資料流的結尾。
ate 指定在第一次建立控制物件時搜尋到資料流的結尾。
badbit 記錄資料流緩衝區的完整性遺失。
basefield 定義為dechex | | oct的位掩碼。
beg 指定相對於序列開頭的搜尋。
binary 指定檔案應該以二進位資料流讀取,而不是文字資料流。
boolalpha 指定以名稱形式插入或擷取 bool 類型的物件 (例如 truefalse),而不是以數值形式。
cur 指定相對於序列中目前位置的搜尋。
dec 指定以十進位格式插入或擷取整數值。
end 指定相對於序列結尾的搜尋。
eofbit 從資料流擷取時記錄檔案結尾。
failbit 記錄從資料流擷取有效欄位失敗。
fixed 以固定點格式插入浮點數值 (沒有指數欄位)。
floatfield 定義為的位掩碼 fixed | scientific
goodbit 清除所有狀態位元。
hex 指定以十六進位格式插入或擷取整數值。
in 指定從資料流擷取。
internal 藉由在產生的數字欄位內部一點中插入填滿字元,來填補欄位寬度。
left 指定左側對齊。
oct 指定以八進位格式插入或擷取整數值。
out 指定插入資料流。
right 指定右側對齊。
scientific 指定以科學記號格式插入浮點數值 (具有一個指數欄位)。
showbase 指定插入可顯示所產生整數欄位之基底的前置詞。
showpoint 指定在產生的浮點欄位無條件插入小數點。
showpos 指定在產生的非負數字欄位插入加號。
skipws 指定在進行某些擷取前,略過前置空白字元。
trunc 指定在控制物件建立時刪除現有檔案的內容。
unitbuf 導致在每次插入之後清除輸出。
uppercase 指定在進行某些插入時,插入小寫字母的大寫對應。

函式

名稱 描述
failure 成員類別可作為類別範本basic_ios中清除成員函式所擲回之所有例外狀況的基類。
flags 設定或傳回目前的旗標設定。
getloc 傳回預 locale 存物件。
imbue 變更地區設定。
Init 在建構時建立標準 iostream 物件。
iword 指派將值儲存為 iword
precision 指定要在浮點數顯示的數字位數。
pword 指派將值儲存為 pword
register_callback 指定回呼函式。
setf 設定指定的旗標。
sync_with_stdio iostream確保和 C 執行時間連結庫作業會依原始程式碼中出現的順序發生。
unsetf 使指定的旗標為關閉。
width 設定輸出資料流的長度。
xalloc 指定變數應該是資料流的一部分。

操作員

名稱 描述
operator= ios_base 物件的指派運算子。

需求

標頭: <ios>

命名空間std

event

指定事件類型。

enum event {
    erase_event,
    imbue_event,
    copyfmt_event};

備註

此類型是列舉型別,描述物件,該物件可以儲存做為向 register_callback註冊之函式的自變數所使用的回呼事件。 不同的事件值如下:

  • copyfmt_event,以識別在複製例外狀況遮罩之前,呼叫結尾附近發生的回呼copyfmt

  • erase_event,以識別在呼叫 copyfmt開頭發生的回呼,或是在 的解構函式 *this呼叫開頭。

  • imbue_event,以識別在呼叫 imbue結尾發生的回呼,就在函式傳回之前。

範例

如需範例,請參閱 register_callback

event_callback

描述傳遞至 register_call的函式。

typedef void (__cdecl *event_callback)(
    event _E,
    ios_base& _Base,
    int _I);

參數

_E
event

_Base
在其中呼叫事件的資料流。

_I
使用者定義的數字。

備註

此類型描述可向 註冊之函式的 register_callback指標。 此類型的函式不得擲回例外狀況。

範例

如需使用 event_callback的範例,請參閱 register_call

failure

類別 failure 可為以例外狀況方式擲回之所有物件的類型定義基底類別,這些例外狀況是 iostreams 程式庫中的函式所擲回,用來回報在資料流緩衝作業期間偵測到的錯誤。

namespace std {
    class failure : public system_error {
    public:
        explicit failure(
            const string& _Message,
            const error_code& _Code = io_errc::stream);

        explicit failure(
            const char* str,
            const error_code& _Code = io_errc::stream);
    };
}

備註

what() 所傳回的值是 _Message 的複本,此複本可能根據 _Code 隨測試擴增。 如果未指定 _Code,則預設值為 make_error_code(io_errc::stream)

範例

// ios_base_failure.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    fstream file;
    file.exceptions(ios::failbit);
    try
    {
        file.open( "rm.txt", ios_base::in );
        // Opens nonexistent file for reading
    }
    catch( ios_base::failure f )
    {
        cout << "Caught an exception: " << f.what() << endl;
    }
}
Caught an exception: ios_base::failbit set

flags

設定或傳回目前的旗標設定。

fmtflags flags() const;
fmtflags flags(fmtflags fmtfl);

參數

fmtfl
新的 fmtflags 設定。

傳回值

先前或目前的 fmtflags 設定。

備註

如需旗標清單,請參閱 ios_base::fmtflags

第一個成員函式會傳回已儲存的格式旗標。 第二個成員函式會在格式旗標中儲存 fmtfl,並傳回其先前儲存的值。

範例

// ios_base_flags.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    cout << cout.flags( ) << endl;
    cout.flags( ios::dec | ios::boolalpha );
    cout << cout.flags( );
}
513
16896

fmtflags

指定輸出外觀的常數。

class ios_base {
public:
   typedef implementation-defined-bitmask-type fmtflags;
   static const fmtflags boolalpha;
   static const fmtflags dec;
   static const fmtflags fixed;
   static const fmtflags hex;
   static const fmtflags internal;
   static const fmtflags left;
   static const fmtflags oct;
   static const fmtflags right;
   static const fmtflags scientific;
   static const fmtflags showbase;
   static const fmtflags showpoint;
   static const fmtflags showpos;
   static const fmtflags skipws;
   static const fmtflags unitbuf;
   static const fmtflags uppercase;
   static const fmtflags adjustfield;
   static const fmtflags basefield;
   static const fmtflags floatfield;
   // ...
};

備註

支援中的 ios操作工具。

此類型為位元遮罩類型,描述可以儲存格式旗標的物件。 不同的旗標值 (項目) 為:

  • dec,以十進位格式插入或擷取整數值。

  • hex,以十六進位格式插入或擷取整數值。

  • oct,以八進位格式插入或擷取整數值。

  • showbase,插入可顯示所產生整數欄位之基底的前置詞。

  • internal,藉由在產生的數字欄位內部一點中插入填滿字元,來視需要填補欄位寬度。 (如需設定欄位寬度的資訊,請參閱 setw)。

  • left,藉由插入填滿字元到所產生欄位的結尾,來視需要填補欄位寬度 (靠左對齊)。

  • right,藉由插入填滿字元到所產生欄位的開頭,來視需要填補欄位寬度 (靠右對齊)。

  • boolalpha,以名稱形式 (例如 truefalse) 而非數值,來插入或擷取類型 bool 的物件。

  • fixed,以固定點格式插入浮點數值 (沒有指數欄位)。

  • scientific,以科學記號格式插入浮點數值 (具有一個指數欄位)。

  • showpoint,在產生的浮點欄位無條件插入小數點。

  • showpos,在產生的非負數字欄位插入加號。

  • skipws,在進行某些擷取前,略過前置空白字元。

  • unitbuf,在進行每次插入之後清除輸出。

  • uppercase,在進行某些插入時,插入小寫字母的大寫對應。

此外,許多有用的值如下:

  • adjustfield,定義為 的位掩碼 internal | left | right

  • basefield,定義為 dec | hex | oct

  • floatfield,定義為 fixed | scientific

如需修改這些格式旗標的函式範例,請參閱 <iomanip>

getloc

傳回預 locale 存物件。

locale getloc() const;

傳回值

預存 locale 物件。

範例

// ios_base_getlock.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
    using namespace std;
    cout << cout.getloc( ).name( ).c_str( ) << endl;
}
C

imbue

變更地區設定。

locale imbue(const locale& _Loc);

參數

_Loc
新的地區設定。

傳回值

先前的地區設定。

備註

成員函式會 _Loc 儲存在物件中 locale ,然後報告回呼事件和 imbue_event。 它會傳回先前儲存的值。

範例

如需範例,請參閱 basic_ios::imbue

Init

在建構時建立標準 iostream 物件。

class Init { };

備註

巢狀類別描述物件,其建構可確保標準 iostream 對象已正確建構,甚至在任意靜態物件的建構函式執行之前。

ios_base

建構 ios_base 物件。

ios_base();

備註

(受保護的) 建構函式不會執行任何動作。 稍後對 basic_ios::init 的呼叫必須先將物件初始化,之後才能將它安全地終結。 因此,類別的唯一安全用途 ios_base 是做為類別範本 basic_ios的基類。

iostate

描述資料流狀態的常數類型。

class ios_base {
public:
   typedef implementation-defined-bitmask-type iostate;
   static const iostate badbit;
   static const iostate eofbit;
   static const iostate failbit;
   static const iostate goodbit;
   // ...
};

備註

此類型為位元遮罩類型,描述可以儲存資料流狀態資訊的物件。 不同的旗標值 (項目) 為:

  • badbit:記錄資料流緩衝區的完整性減損。
  • eofbit:從資料流擷取時記錄檔案結尾。
  • failbit:記錄從資料流擷取有效欄位時的失敗。

此外,還有一個有用的值 goodbit,其中未設定先前提到的任何位元 (goodbit 保證為零)。

iword

指派將值儲存為 iword

long& iword(int idx);

參數

idx
要以 iword 形式儲存之值的索引。

備註

成員函式會傳回具有 型別long元素之可延伸陣列元素idx的參考。 所有元素都實際存在,且一開始儲存的值為零。 傳回的參考在物件的下一次呼叫 iword 之後、物件被呼叫 basic_ios::copyfmt改變之後,或對象終結之後,傳回的參考無效。

如果 idx 為負數,或如果項目無法使用唯一記憶體,則函式會呼叫 setstate(badbit) 並傳回可能不是唯一的參考。

若要取得唯一索引,若要在 類型 ios_base的所有物件上使用 ,請呼叫 xalloc

範例

如需如何使用 iword 的範例,請參閱 xalloc

openmode

描述如何與資料流互動。

class ios_base {
public:
   typedef implementation-defined-bitmask-type openmode;
   static const openmode  in;
   static const openmode  out;
   static const openmode  ate;
   static const openmode  app;
   static const openmode  trunc;
   static const openmode  binary;
   // ...
};

備註

iostream 個對象的開啟模式。 旗標值為:

常數 效果
app 在每個寫入之前,搜尋數據流結尾
ate 在開啟后立即搜尋數據流結尾
binary 在二進位模式中開啟。 (如需二進位模式的描述,請參閱 fopen
in 開啟以供閱讀
out 開啟以進行寫入
trunc 開啟後刪除檔案的內容

範例

// ios_base_openmode.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    fstream file;
    file.open( "rm.txt", ios_base::out | ios_base::trunc );

    file << "testing";
}

operator=

ios_base 物件的指派運算子。

ios_base& operator=(const ios_base& right);

參數

right
ios_base 類型的物件。

傳回值

要作為指派對象的物件。

備註

運算子會複製已儲存的格式設定資訊,建立任何可延伸陣列的新複本。 然後它會傳回 *this。 不會複製回呼堆疊。

此運算子僅供衍生自 ios_base 的類別使用。

precision

指定要在浮點數顯示的數字位數。

streamsize precision() const;
streamsize precision(streamsize _Prec);

參數

_Prec
要顯示的有效位數,或是固定標記法中的小數點後位數。

傳回值

第一個成員函式會傳回已儲存的顯示整數位數。 第二個成員函式會在顯示整數位數中儲存 _Prec,並傳回其先前儲存的值。

備註

浮點數會以 fixed固定表示法顯示。

範例

// ios_base_precision.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
    using namespace std;
    float i = 31.31234F;

    cout.precision( 3 );
    cout << i << endl;          // display three significant digits
    cout << fixed << i << endl; // display three digits after decimal
                                // point
}
31.3
31.312

pword

指派將值儲存為 pword

void *& pword(int index);

參數

index
要以 pword 形式儲存之值的索引。

備註

成員函式會傳回具有類型void指標之可延伸陣列元素索引的參考。 所有元素都實際存在,且一開始儲存 Null 指標。 傳回的參考在物件的下一次呼叫 pword 之後、物件被呼叫 basic_ios::copyfmt改變之後,或對象終結之後,傳回的參考無效。

如果 index 為負數,或元素無法使用唯一的記憶體,則函式會呼叫 setstate(badbit) 並傳回可能不是唯一的參考。

若要取得唯一索引,若要在 類型 ios_base的所有物件上使用 ,請呼叫 xalloc

範例

如需使用 pword的範例,請參閱 xalloc

register_callback

指定回呼函式。

void register_callback(
    event_callback pfn, int idx);

參數

pfn
回呼函式的指標。

idx
使用者定義的數字。

備註

成員函式會將配對 {pfn, idx} 推送至儲存的回呼堆疊 回呼堆棧。 回報回呼事件 ev 時,表達式 (*pfn)(ev, *this, idx)會以反向順序呼叫函式。

範例

// ios_base_register_callback.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

using namespace std;

void callback1( ios_base::event e, ios_base& stream, int arg )
{
    cout << "in callback1" << endl;
    switch ( e )
    {
    case ios_base::erase_event:
        cout << "an erase event" << endl;
        break;
    case ios_base::imbue_event:
        cout << "an imbue event" << endl;
        break;
    case ios_base::copyfmt_event:
        cout << "an copyfmt event" << endl;
        break;
    };
}

void callback2( ios_base::event e, ios_base& stream, int arg )
{
    cout << "in callback2" << endl;
    switch ( e )
    {
    case ios_base::erase_event:
        cout << "an erase event" << endl;
        break;
    case ios_base::imbue_event:
        cout << "an imbue event" << endl;
        break;
    case ios_base::copyfmt_event:
        cout << "an copyfmt event" << endl;
        break;
    };
}

int main( )
{
    // Make sure the imbue will not throw an exception
    // assert( setlocale( LC_ALL, "german" )!=NULL );

    cout.register_callback( callback1, 0 );
    cin.register_callback( callback2, 0 );

    try
    {
        // If no exception because the locale's not found,
        // generate an imbue_event on callback1
        cout.imbue(locale("german"));
    }
    catch(...)
    {
        cout << "exception" << endl;
    }

    // This will
    // (1) erase_event on callback1
    // (2) copyfmt_event on callback2
    cout.copyfmt(cin);

    // We get two erase events from callback2 at the end because
    // both cin and cout have callback2 registered when cin and cout
    // are destroyed at the end of program.
}
in callback1
an imbue event
in callback1
an erase event
in callback2
an copyfmt event
in callback2
an erase event
in callback2
an erase event

seekdir

指定位移作業的起點。

namespace std {
    class ios_base {
    public:
        typedef implementation-defined-enumerated-type seekdir;
        static const seekdir beg;
        static const seekdir cur;
        static const seekdir end;
        // ...
    };
}

備註

此類型是列舉型別,描述物件,該物件可以儲存用來作為數 iostream 個類別成員函式之自變數的搜尋模式。 不同的旗標值為:

  • beg,表示要搜尋(改變目前讀取或寫入位置)相對於序列開頭(陣列、數據流或檔案)。

  • cur,表示要相對於序列中目前的位置進行搜尋。

  • end,表示要相對於序列結尾進行搜尋。

範例

// ios_base_seekdir.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    fstream file;
    file.open( "rm.txt", ios_base::out | ios_base::trunc );

    file << "testing";
    file.seekp( 0, ios_base::beg );
    file << "a";
    file.seekp( 0, ios_base::end );
    file << "a";
}

setf

設定指定的旗標。

fmtflags setf(
    fmtflags _Mask
);
fmtflags setf(
    fmtflags _Mask,
    fmtflags _Unset
);

參數

_Mask
要開啟的旗標。

_Unset
要關閉的旗標。

傳回值

先前的格式旗標

備註

第一個成員函式會有效呼叫 flags(_Mask | _Flags) (設定選取的位),然後傳回先前的格式旗標。 第二個成員函式會有效呼叫 flags(_Mask & fmtfl, flags & ~_Mask) (取代遮罩底下的選取位),然後傳回先前的格式旗標。

範例

// ios_base_setf.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
    using namespace std;
    int i = 10;
    cout << i << endl;

    cout.unsetf( ios_base::dec );
    cout.setf( ios_base::hex );
    cout << i << endl;

    cout.setf( ios_base::dec );
    cout << i << endl;
    cout.setf( ios_base::hex, ios_base::dec );
    cout << i << endl;
}

sync_with_stdio

iostream確保和 C 執行時間連結庫作業會依原始程式碼中出現的順序發生。

static bool sync_with_stdio(
   bool _Sync = true
);

參數

_Sync
所有數據流是否與 stdio同步。

傳回值

此函式的先前設定。

備註

靜態成員函式會 stdio 儲存同步旗標,一開始 true為 。 當 為 時 true,此旗標可確保相同檔案上的作業會在C++標準連結庫中定義的函式與函式之間 iostreams 正確同步處理。 否則,可能會或無法保證同步處理,但效能可能會改善。 函式會 _Sync 儲存在同步旗標中 stdio ,並傳回其先前的預存值。 您只能在標準數據流上執行任何作業之前可靠地呼叫它。

unsetf

關閉指定的旗標。

void unsetf(
   fmtflags _Mask
);

參數

_Mask
您要關閉的旗標。

備註

成員函式會有效呼叫 flags(~_Mask & flags) (清除選取的位)。

範例

如需使用 unsetf的範例,請參閱 ios_base::setf

width

設定輸出資料流的長度。

streamsize width( ) const;
streamsize width(
   streamsize _Wide
);

參數

_Wide
所需的輸出資料流大小。

傳回值

目前的寬度設定。

備註

第一個成員函式會傳回預存的欄位寬度。 第二個成員函式會 _Wide 儲存在字段寬度中,並傳回其先前儲存的值。

範例

// ios_base_width.cpp
// compile with: /EHsc
#include <iostream>

int main( ) {
    using namespace std;

    cout.width( 20 );
    cout << cout.width( ) << endl;
    cout << cout.width( ) << endl;
}
20
0

xalloc

指定變數是數據流的一部分。

static int xalloc( );

傳回值

靜態成員函式會傳回儲存的靜態值,它會在每個呼叫上遞增。

備註

呼叫成員函 iword 式或 pword時,您可以使用傳回值作為唯一的索引自變數。

範例

// ios_base_xalloc.cpp
// compile with: /EHsc
// Lets you store user-defined information.
// iword, jword, xalloc
#include <iostream>

int main( )
{
    using namespace std;

    static const int i = ios_base::xalloc();
    static const int j = ios_base::xalloc();
    cout.iword( i ) = 11;
    cin.iword( i ) = 13;
    cin.pword( j ) = "testing";
    cout << cout.iword( i ) << endl;
    cout << cin.iword( i ) << endl;
    cout << ( char * )cin.pword( j ) << endl;
}
11
13
testing

另請參閱

C++ 標準程式庫中的執行緒安全
iostream 程式設計
iostreams 慣例