std::basic_ostream<CharT,Traits>:: basic_ostream
From cppreference.net
<
cpp
|
io
|
basic ostream
|
explicit
basic_ostream
(
std::
basic_streambuf
<
CharT, Traits
>
*
sb
)
;
|
(1) | |
|
protected
:
basic_ostream ( const basic_ostream & rhs ) = delete ; |
(2) | (C++11以降) |
|
protected
:
basic_ostream ( basic_ostream && rhs ) ; |
(3) | (C++11以降) |
2)
コピーコンストラクタはprotectedで、削除されています。出力ストリームはコピー不可です。
3)
ムーブコンストラクタは
basic_ios
<
CharT, Traits
>
::
move
(
rhs
)
を使用して、
rdbuf()
を除くすべての
basic_ios
メンバを
rhs
から
*
this
へムーブします。このムーブコンストラクタはprotectedです:これはムーブ可能な出力ストリームクラス
std::basic_ofstream
および
std::basic_ostringstream
のムーブコンストラクタによって呼び出され、これらのクラスは関連するストリームバッファを正しくムーブする方法を知っています。
パラメータ
| sb | - | 出力シーケンスとして使用するストリームバッファ |
| rhs | - | 初期化元のbasic_ostream |
注記
basic_ios::init(sb)
は
sb
が null ポインタの場合に
badbit
を設定し、また
basic_ostream::sentry
はストリームが既に失敗状態にある場合には何も行わないため、null ポインタ
sb
から構築されたストリームへの書き込みは no-op となります。
例
このコードを実行
#include <iostream> #include <sstream> #include <utility> int main() { // エラー: コピーコンストラクタは削除済み // std::ostream myout(std::cout); // OK: coutとバッファを共有 std::ostream myout(std::cout.rdbuf()); // エラー: ムーブコンストラクタはprotected // std::ostream s2(std::move(std::ostringstream() << 7.1)); // OK: 派生クラス経由でムーブコンストラクタが呼び出される std::ostringstream s2(std::ostringstream() << 7.1); myout << s2.str() << '\n'; std::ostream dev_null{nullptr}; // 上記の注記を参照 dev_null << "no-op"; }
出力:
7.1