- ios[meta header]
- std[meta namespace]
- basic_ios[meta class]
- function[meta id-type]
- cpp11[meta cpp]
explicit operator bool() const; // (1) C++11現在の状態値が正常を示す値になっていることを判定する変換関数。
!fail()。
- 本関数と
good()は結果が異なる事に注意。本関数はeofbitが設定されていてもtrueを返すが、good()はeofbitがセットされている場合falseを返す。 - C++98 までは本関数とほぼ等価の機能が
operator void*()によって提供されていたが、C++11 でユーザ定義変換関数にexplicitを指定することで当該変換の暗黙適用を回避できるようになったことから、より意図が明確となるように本関数が提供され、operator void*()は廃止された。
なお、if文やwhile文の条件式で使用している分には問題とならないが、この変更によって一部 C++98 までは問題の無かったコードがコンパイルエラーとなる等の非互換が生じている。// C++98 まではコンパイル可能だが C++11 からはコンパイルエラーになる例 bool b1 = std::cout; bool b2 = std::cout == NULL;
explicit operator bool() const {
return !fail();
}- fail[link fail.md]
- C++11
libc++ では C++03 モードでも本関数が使用可能である。(ただし、explicit ではない)
- 状態値の書き込み
- 状態値の読み取り
- LWG Issue 1094. Replace "unspecified-bool-type" by "explicit operator
bool()const" in I/O library- C++11で、未規定のbool型への変換関数が
explicit operator bool()へ置き換えられた
- C++11で、未規定のbool型への変換関数が