std::basic_osyncstream

出自cppreference.com
< cpp | io
在標頭 <syncstream> 定義
template<
    class CharT,
    class Traits = std::char_traits<CharT>,
    class Allocator = std::allocator<CharT>
> class basic_osyncstream : public std::basic_ostream<CharT, Traits>
(C++20 起)

類模板 std::basic_osyncstreamstd::basic_syncbuf 的便利包裝。它提供機制以對寫入同一流的各線程進行同步。

它能用作具名變量:

{
    std::osyncstream sync_out(std::cout); // std::cout 的同步包装
    sync_out << "Hello, ";
    sync_out << "World!";
    sync_out << std::endl; // 标记冲洗,但仍未进行
    sync_out << "and more!\n";
} // 传输各字符并冲洗 std::cout

還有臨時量:

std::osyncstream(std::cout) << "Hello, " << "World!" << '\n';

它提供保證:所有對最終目標緩衝區(上例中是 std::cout)作出的輸出將免除數據競爭,而且將不以任何方式穿插或截斷,只要每次對該最終目標緩衝區的寫入都通過 std::basic_osyncstream(可以不同的)實例進行。

std::basic_osyncstream 的典型實現僅保有一個數據成員:被包裝的 std::basic_syncbuf

cpp/io/ios basecpp/io/basic ioscpp/io/basic ostream

繼承圖

提供了幾個針對常用字符類型的 typedef:

在標頭 <syncstream> 定義
類型 定義
std::osyncstream std::basic_osyncstream<char>
std::wosyncstream std::basic_osyncstream<wchar_t>

成員類型

成員類型 定義
char_type CharT[編輯]
traits_type TraitsTraits::char_type 不是 CharT 時程序非良構。[編輯]
int_type Traits::int_type[編輯]
pos_type Traits::pos_type[編輯]
off_type Traits::off_type[編輯]
allocator_type Allocator
streambuf_type std::basic_streambuf<CharT, Traits>
syncbuf_type std::basic_syncbuf<CharT, Traits, Allocator>

成員函數

構造 basic_osyncstream 對象
(公開成員函數) [編輯]
賦值 basic_osyncstream 對象
(公開成員函數) [編輯]
銷毀 basic_osyncstream 並發出它的內部緩衝區
(公開成員函數) [編輯]
獲得指向底層 basic_syncbuf 的指針
(公開成員函數) [編輯]
獲得指向最終目標流緩衝的指針
(公開成員函數) [編輯]
調用底層 basic_syncbuf 上的 emit() 以傳輸它的內部數據到最終目標
(公開成員函數) [編輯]

繼承自 std::basic_ostream

成員函數

有格式輸出
插入帶格式數據
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]
無格式輸出
插入字符
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]
按區塊插入字符
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]
尋位
返回輸出位置指示器
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]
設置輸出位置指示器
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]
雜項
與底層存儲設備同步
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]

成員類

為輸出操作實現流準備的基本邏輯
(std::basic_ostream<CharT,Traits> 的公開成員類) [編輯]

繼承自 std::basic_ios

成員類型

成員類型 定義
char_type CharT
traits_type Traits
int_type Traits::int_type
pos_type Traits::pos_type
off_type Traits::off_type

成員函數

狀態函數
檢查是否沒有發生錯誤,即是否可執行輸入/輸出操作
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
檢查是否到達了文件末尾
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
檢查是否發生了可恢復的錯誤
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
檢查是否已發生不可恢復的錯誤
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
檢查是否有錯誤發生(fail() 的同義詞)
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
檢查是否沒有發生錯誤(!std::basic_ios::fail 的同義詞)
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
返回狀態標誌
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
設置狀態標誌
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
修改狀態標誌
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
格式化
複製格式化信息
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
管理填充字符
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
雜項
管理異常掩碼
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
設置本地環境
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
管理相關的流緩衝區
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
管理綁定的流
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
窄化字符
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
拓寬字符
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]

繼承自 std::ios_base

成員函數

格式化
管理格式標誌
(std::ios_base 的公開成員函數) [編輯]
設置特定格式標誌
(std::ios_base 的公開成員函數) [編輯]
清除特定格式的標誌
(std::ios_base 的公開成員函數) [編輯]
管理浮點數操作的精度
(std::ios_base 的公開成員函數) [編輯]
管理欄位寬度
(std::ios_base 的公開成員函數) [編輯]
本地環境
設置本地環境
(std::ios_base 的公開成員函數) [編輯]
返回當前本地環境
(std::ios_base 的公開成員函數) [編輯]
內部可擴展數組
[靜態]
返回能安全用作 pword()iword() 的索引的程序範圍內獨有的整數
(std::ios_base 的公開靜態成員函數) [編輯]
若必要則調整私有存儲的大小,並訪問位於給定索引的 long 元素
(std::ios_base 的公開成員函數) [編輯]
若需要則調整私有存儲的大小,並訪問位於給定索引的 void* 元素
(std::ios_base 的公開成員函數) [編輯]
雜項
註冊事件回調函數
(std::ios_base 的公開成員函數) [編輯]
設置 C++ 和 C 的輸入/輸出庫是否可以互操作
(std::ios_base 的公開靜態成員函數) [編輯]
成員類
流異常
(std::ios_base 的公開成員類) [編輯]
初始化標準流對象
(std::ios_base 的公開成員類) [編輯]

成員類型和常量

類型 解釋

流打開模式類型

同時定義下列常量:

常量 解釋[編輯]
app 每次寫入前尋位到流結尾[編輯]
binary 二進制模式打開[編輯]
in 為讀打開[編輯]
out 為寫打開[編輯]
trunc 在打開時捨棄流的內容[編輯]
ate 打開後立即尋位到流結尾[編輯]
noreplace (C++23) 以獨占模式打開[編輯]

(typedef) [編輯]
格式化標誌類型

亦定義下列常量:

常量 解釋[編輯]
dec 為整數輸入/輸出使用十進制底:見 std::dec[編輯]
oct 為整數輸入/輸出使用八進制底:見 std::oct[編輯]
hex 為整數輸入/輸出使用十六進制底:見 std::hex[編輯]
basefield dec | oct | hex。適用於掩碼運算[編輯]
left 左對齊(添加填充字符到右側):見 std::left[編輯]
right 右對齊(添加填充字符到左側):見 std::right[編輯]
internal 居中對齊(添加填充字符到內部選定點):見 std::internal[編輯]
adjustfield left | right | internal。適用於掩碼運算[編輯]
scientific 用科學記數法生成浮點數類型,或在與 fixed 組合時用十六進制記法:見 std::scientific[編輯]
fixed 用定點記法生成浮點數類型,或在與 scientific 組合時用十六進制記法:見 std::fixed[編輯]
floatfield scientific | fixed。適用於掩碼運算[編輯]
boolalpha 以字母數字格式插入並提取 bool 類型:見 std::boolalpha[編輯]
showbase 生成為整數輸出指示數字基底的前綴,貨幣輸入/輸出中要求現金指示符:見 std::showbase[編輯]
showpoint 無條件為浮點數輸出生成小數點字符:見 std::showpoint[編輯]
showpos 為非負數值輸出生成 + 字符:見 std::showpos[編輯]
skipws 在具體輸入操作前跳過前導空白:見 std::skipws[編輯]
unitbuf 在每次輸出操作後沖洗輸出:見 std::unitbuf[編輯]
uppercase 在具體輸出的輸出操作中以大寫等價替換小寫字符:見 std::uppercase[編輯]

(typedef) [編輯]
流狀態類型

亦定義下列常量:

常量 解釋[編輯]
goodbit 無錯誤 [編輯]
badbit 不可恢復的流錯誤 [編輯]
failbit 輸入/輸出操作失敗(格式化或提取錯誤) [編輯]
eofbit 關聯的輸出序列已抵達文件尾 [編輯]

(typedef) [編輯]
尋位方向類型

亦定義下列常量:

常量 解釋[編輯]
beg 流的開始 [編輯]
end 流的結尾 [編輯]
cur 流位置指示器的當前位置 [編輯]

(typedef) [編輯]
指定事件類型
(枚舉) [編輯]
回調函數類型
(typedef) [編輯]

註解

功能特性測試 標準 功能特性
__cpp_lib_syncbuf 201803L (C++20) 帶同步的緩衝 ostream(std::osyncstreamstd::syncbuf)和操縱符