ios_base
類別
類別描述不相依於範本參數的輸入和輸出數據流通用的記憶體和成員函式。 (類別範本 basic_ios
描述什麼是通用的,而且相依於範本參數。
類別 ios_base
的 物件會儲存格式資訊,其中包含:
在型
fmtflags
別的物件中格式化旗標。型
iostate
別 物件中的例外狀況遮罩。型
int
別 物件中的欄位寬度。int
類型物件中的顯示精確度。locale
型別locale
物件中的物件。兩個可延伸陣列,具有類型和
long
void
指標的專案。
類別的物件 ios_base
也會將數據流狀態資訊儲存在 型 iostate
別 的物件和回呼堆疊中。
成員
建構函式
名稱 | 描述 |
---|---|
ios_base |
建構 ios_base 物件。 |
Typedefs
名稱 | 描述 |
---|---|
event_callback |
描述傳遞至 register_call 的函式。 |
fmtflags |
指定輸出外觀的常數。 |
iostate |
定義描述資料流狀態的常數。 |
openmode |
描述如何與資料流互動。 |
seekdir |
指定位移作業的起點。 |
列舉
名稱 | 描述 |
---|---|
event |
指定事件類型。 |
常數
名稱 | 描述 |
---|---|
adjustfield |
定義為internal left | | right 的位掩碼。 |
app |
指定在每次插入之前搜尋到資料流的結尾。 |
ate |
指定在第一次建立控制物件時搜尋到資料流的結尾。 |
badbit |
記錄資料流緩衝區的完整性遺失。 |
basefield |
定義為dec hex | | oct 的位掩碼。 |
beg |
指定相對於序列開頭的搜尋。 |
binary |
指定檔案應該以二進位資料流讀取,而不是文字資料流。 |
boolalpha |
指定以名稱形式插入或擷取 bool 類型的物件 (例如 true 和 false ),而不是以數值形式。 |
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
註冊之函式的自變數所使用的回呼事件。 不同的事件值如下:
範例
如需範例,請參閱 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
,以名稱形式 (例如true
和false
) 而非數值,來插入或擷取類型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