最終更新日時:
が更新

履歴 編集

function
<istream>

std::basic_istream::operator=(C++11)

protected:
  basic_istream& operator=(const basic_istream& rhs) = delete; // (1) C++11

  basic_istream& operator=(basic_istream&& rhs);               // (2) C++11

概要

ストリームオブジェクトを代入する。

効果

  • (1) : コピー代入演算子。コピー代入不可。
  • (2) : ムーブ代入演算子。swap(rhs)を呼び出す。

戻り値

  • (2) : *this

備考

  • (1) :
    • C++98 : この演算子は宣言されていなかった。コピー代入を行おうとするとコンパイラがコピー代入演算子を暗黙に生成しようとするが、基底クラスのbasic_ios::operator=がアクセス指定子privateで宣言されているため、エラーとなっていた
    • C++11 : アクセス指定子protecteddelete定義される。誤ってコピーしようとした際のエラーメッセージが分かりやすくなる
  • (2) : rdbuf()は交換されない。

バージョン

言語

  • C++11

関連項目

参照

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