Namespaces
Variants

std::basic_istream<CharT,Traits>:: basic_istream

From cppreference.net
explicit basic_istream ( std:: basic_streambuf < CharT, Traits > * sb ) ;
(1)
protected :
basic_istream ( const basic_istream & rhs ) = delete ;
(2) (C++11以降)
protected :
basic_istream ( basic_istream && rhs ) ;
(3) (C++11以降)

1) basic_istream オブジェクトを構築し、基底クラスに初期値を割り当てるために basic_ios :: init ( sb ) を呼び出す。 gcount() の値はゼロに初期化される。

2) コピーコンストラクタはprotectedで、削除されています。入力ストリームはコピーできません。

3) ムーブコンストラクタは rhs から gcount() の値をコピーし、 rhs のgcount()値をゼロに設定し、 basic_ios < CharT, Traits > :: move ( rhs ) を使用して rdbuf() を除くすべてのbasic_iosメンバを rhs から * this へムーブします。このムーブコンストラクタはprotectedです:これはムーブ可能な入力ストリームクラス std::basic_ifstream および std::basic_istringstream のムーブコンストラクタによって呼び出され、これらのクラスは関連するストリームバッファを正しくムーブする方法を知っています。

パラメータ

sb - 基盤デバイスとして使用するストリームバッファ

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream s1("hello");
    std::istream s2(s1.rdbuf()); // OK: s2はs1とバッファを共有
//  std::istream s3(std::istringstream("test")); // エラー: ムーブコンストラクタはprotected
//  std::istream s4(s2);                         // エラー: コピーコンストラクタは削除済み
    std::istringstream s5(std::istringstream("world")); // OK: 派生クラスによって
                                                        //     ムーブコンストラクタが呼び出される
    std::cout << s2.rdbuf() << ' ' << s5.rdbuf() << '\n';
}

出力:

hello world