Skip to content

Latest commit

 

History

History
56 lines (47 loc) · 2.15 KB

op_voidptr.md

File metadata and controls

56 lines (47 loc) · 2.15 KB

operator void*

  • ios[meta header]
  • std[meta namespace]
  • basic_ios[meta class]
  • function[meta id-type]
operator void*() const;

概要

現在の状態値が正常を示す値になっていることを判定する変換関数。

戻り値

fail()true の場合、ヌルポインタ。それ以外の場合、何らかの非ヌルポインタ。

備考

  • 本関数と good() は結果が異なる事に注意。本関数は eofbit が設定されていても非ヌルポインタ(つまり真)を返すが、good()eofbit が設定されている場合 false を返す。
  • C++03 までは本関数によって basic_ios を条件式の文脈等で明示的な変換無しに使用することができるようにしていたが、C++11 でユーザ定義変換関数に explicit を指定することで当該変換の暗黙適用を回避できるようになったことから、より意図が明確となるように operator bool() が提供され、本関数は廃止された。
    なお、if 文や while 文の条件式で使用している分には問題とならないが、この変更によって一部 C++03 までは問題の無かったコードがコンパイルエラーとなる等の非互換が生じている。
    // C++03 まではコンパイル可能だが C++11 からはコンパイルエラーになる例
    bool b1 = std::cout;
    bool b2 = std::cout == NULL;

実装例

explicit operator void*() const {
  return fail() ? NULL : const_cast<basic_ios*>(this);
}
  • fail[link fail.md]
  • basic_ios[link ../basic_ios.md]

バージョン

言語

  • C++03 まで

備考

libc++ には C++03 モードでも本関数は存在しない。

参照