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