- istream[meta header]
- std[meta namespace]
- basic_istream[meta class]
- function[meta id-type]
public:
explicit basic_istream(basic_streambuf<CharT, Traits>* sb); // (1) C++98
protected:
basic_istream(const basic_istream& rhs) = delete; // (2) C++11
basic_istream(basic_istream&& rhs); // (3) C++11- basic_istream[link ../basic_istream.md]
- basic_streambuf[link ../../streambuf/basic_streambuf.md]
入力ストリームオブジェクトを構築する。
- (1) : ストリームバッファを受け取って構築する
- (2) : コピーコンストラクタ。コピー構築不可
- (3) : ムーブコンストラクタ
- (1) :
basic_ios<char_type, traits_type>::init(sb)を呼び出して初期化する。あわせて、gcount()が0を返すようにする。 - (3) : 基底クラスを
basic_ios<char_type, traits_type>::move(rhs)によってムーブ構築し、rhsのgcount()の値をコピーする。その後、rhsのgcount()を0にする。
- (2) :
- C++98 : このコンストラクタは宣言されていなかった。コピー構築を行おうとするとコンパイラがコピーコンストラクタを暗黙に生成しようとするが、基底クラスの
basic_iosのコピーコンストラクタがアクセス指定子privateで宣言されているため、エラーとなっていた - C++11 : アクセス指定子
protectedでdelete定義される。誤ってコピーしようとした際のエラーメッセージが分かりやすくなる
- C++98 : このコンストラクタは宣言されていなかった。コピー構築を行おうとするとコンパイラがコピーコンストラクタを暗黙に生成しようとするが、基底クラスの
- C++98
basic_istream::~basic_istreambasic_istream::operator=basic_istream::swapbasic_ios::initbasic_ios::move
- LWG Issue 911. I/O streams and move/swap semantic
- C++11で、ムーブコンストラクタ・ムーブ代入演算子・
swapがprotectedとなり、非メンバ関数のswapが削除された。派生クラスのみが使用でき、基底クラスのオブジェクトを直接ムーブ・交換できないようにするため
- C++11で、ムーブコンストラクタ・ムーブ代入演算子・