public member function
<istream> <iostream>

std::basic_istream::readsome

streamsize readsome (char_type* s, streamsize n);
從流中讀取可用的資料
從流中提取最多 n 個字元並存儲在 s 指向的陣列中,一旦與 關聯的流緩衝區物件(如果有)的內部緩衝區中的字元用完,提取就會停止,即使尚未到達檔案尾

此函式旨在用於從某些型別的非同步源讀取資料,這些源可能會等待更多字元,因為它在內部緩衝區用盡時立即停止提取字元,從而避免潛在的延遲。

請注意,此函式依賴於與流關聯的特定流緩衝區物件的內部實現,對於標準類而言,其行為在很大程度上是實現定義的。

在內部,該函式首先建立一個 sentry 物件(將 noskipws 設定為 true)來訪問輸入序列。然後(如果 good),它透過呼叫其成員函式 in_avail 來檢查與流緩衝區物件關聯的當前有多少字元可用,並透過呼叫 sbumpc(或 sgetc)來提取多達該數量的字元。最後,它銷燬 sentry 物件,然後返回。

透過呼叫成員函式 gcount 可以訪問此函式成功讀取並存儲的字元數。

引數

s
指向儲存提取字元的陣列的指標。
成員型別 char_type 是流使用的字元型別(即其第一個類模板引數 charT)。
n
要提取的最大字元數。
streamsize 是一個帶符號整型。

返回值

儲存的字元數。
streamsize 是一個帶符號整型。

錯誤透過修改內部狀態標誌來指示
flagerror
eofbit輸入序列沒有可用的字元(由 rdbuf()->in_avail() 返回 -1 報告)。
failbit構造 sentry 失敗(例如,當呼叫前的 *流狀態* 不是 good 時)。
badbit流錯誤(例如,當此函式捕獲由內部操作丟擲的異常時)。
設定時,流的完整性可能已受到影響。
一次操作可能設定多個標誌。

如果操作設定了已向成員 exceptions 註冊的內部狀態標誌,則該函式將丟擲其成員型別為 failure 的異常。

資料競爭

修改 s 指向的陣列中的元素以及流物件。
對同一流物件的併發訪問可能會導致資料爭用,但標準流物件 cinwcin與 stdio 同步時除外(在這種情況下,不會引發資料爭用,儘管對於提取的字元歸屬給執行緒的順序沒有保證)。

異常安全

基本保證:如果丟擲異常,物件處於有效狀態。
如果結果錯誤狀態標誌不是 goodbit 並且成員 exceptions 被設定為針對該狀態丟擲,則會丟擲其成員型別為 failure 的異常。
任何由內部操作丟擲的異常都會被函式捕獲和處理,並設定 badbit。如果對 exceptions 的最後一次呼叫設定了 badbit,則函式將重新丟擲捕獲的異常。

另見