Namespaces
Variants

std::basic_ostream<CharT,Traits>:: basic_ostream

From cppreference.net
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以降)
1) basic_ostream オブジェクトを構築し、基底クラスに初期値を割り当てるために basic_ios::init(sb) を呼び出す。
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