最終更新日時:
が更新

履歴 編集

function
<istream>

std::basic_iostream::コンストラクタ

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

概要

入出力ストリームオブジェクトを構築する。

  • (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 : アクセス指定子protecteddelete定義される。誤ってコピーしようとした際のエラーメッセージが分かりやすくなる

バージョン

言語

  • C++98

関連項目

参照

  • LWG Issue 911. I/O streams and move/swap semantic
    • C++11で、ムーブコンストラクタ・ムーブ代入演算子・swapprotectedとなり、非メンバ関数のswapが削除された。派生クラスのみが使用でき、基底クラスのオブジェクトを直接ムーブ・交換できないようにするため