basic_osyncstream(streambuf_type* buf, const Allocator& allocator); // (1)
explicit basic_osyncstream(streambuf_type* obuf)
: basic_osyncstream(obuf, Allocator()) {} // (2)
basic_osyncstream(basic_ostream<charT, traits>& os, const Allocator& allocator)
: basic_osyncstream(os.rdbuf(), allocator) {} // (3)
explicit basic_osyncstream(basic_ostream<charT, traits>& os)
: basic_osyncstream(os, Allocator()) {} // (4)
basic_osyncstream(basic_osyncstream&& other) noexcept; // (5)
概要
- (1)〜(4) : ラップするストリーム、アロケータ(もしあれば)を受け取るコンストラクタ。
- (5) : ムーブコンストラクタ。
効果
- (1) : 提供されるストリームバッファ(
buf
)、アロケータ(allocator
)を使用してプライベートメンバのstd::basic_syncbuf
を初期化し、そのポインタを用いて基底クラスであるstd::basic_ostream
を初期化する。 - (2)(3) : (1)に委譲。
- (4) : (3)に委譲。
- (5) : 対応する
other
のサブオブジェクトから基底クラスとプライベートメンバのstd::basic_syncbuf
をムーブ構築し、基底クラスの初期化を完了するためにstd::basic_ostream<charT, traits>::set_rdbuf(addressof(sb))
を呼び出す。
事後条件
- (1)〜(4) :
get_wrapped() == buf
がtrue
である。 - (5) :
get_wrapped()
によって返される値は、このコンストラクタを呼び出す前にos.get_wrapped()
によって返される値である。また、nullptr == other.get_wrapped()
がtrue
である。
例
#include <iostream>
#include <syncstream>
int main()
{
std::osyncstream bout{std::cout};
bout << "Hello, World!";
}
xxxxxxxxxx
#include <iostream>
#include <syncstream>
int main()
{
std::osyncstream bout{std::cout};
bout << "Hello, World!";
}
出力
Hello, World!
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: 11.1 ✅
- Visual C++: 2019 update 10 ✅