std::basic_istream<CharT,Traits>:: basic_istream
|
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