Skip to content

Latest commit

 

History

History
54 lines (38 loc) · 2.59 KB

File metadata and controls

54 lines (38 loc) · 2.59 KB

コンストラクタ

  • 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)によってムーブ構築し、rhsgcount()の値をコピーする。その後、rhsgcount()0にする。

備考

  • (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が削除された。派生クラスのみが使用でき、基底クラスのオブジェクトを直接ムーブ・交換できないようにするため