std::basic_ios<CharT,Traits>:: operator bool
|
operator
/* unspecified-boolean-type */
(
)
const
;
|
(1) | (C++11まで) |
|
explicit
operator
bool
(
)
const
;
|
(2) | (C++11以降) |
ストリームにエラーがないかどうかをチェックします。
fail()
が
true
を返す場合、ブーリアンコンテキストで
false
と評価される値を返し、それ以外の場合、ブーリアンコンテキストで
true
と評価される値を返します。
この演算子により、ストリームおよびストリームへの参照を返す関数をループ条件として使用することが可能になり、 while ( stream >> value ) { ... } や while ( std:: getline ( stream, string ) ) { ... } といった慣用的なC++入力ループが実現できます。このようなループは、入力操作が成功した場合にのみループ本体を実行します。
目次 |
パラメータ
(なし)
戻り値
注記
この変換は、 bool が期待される文脈(例えば if条件 など)で使用できます。ただし、 bool で発生し得る 暗黙変換 (例えば int への変換など)は許可されません。
C++98では、 operator bool は safe bool問題 のため直接提供できませんでした。C++98での初期の解決策は operator void * を提供し、 fail ( ) が true を返す場合はnullポインタを、それ以外の場合は非nullポインタを返すようにすることでした。これは LWG issue 468 の解決により置き換えられ、 Safe Boolイディオム の適用が可能になりました。
C++11以降、変換関数は explicit にすることができます。 LWG issue 1094 の解決により、明示的な operator bool が導入され、ブール変換は安全になりました。
例
#include <iostream> #include <sstream> int main() { std::istringstream s("1 2 3 error"); int n; std::cout << std::boolalpha << "s is " << static_cast<bool>(s) << '\n'; while (s >> n) std::cout << n << '\n'; std::cout << "s is " << static_cast<bool>(s) << '\n'; }
出力:
s is true 1 2 3 s is false
欠陥報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 468 | C++98 | operator void * が提供されていた | 未指定のブール型への変換関数が代わりに提供される |
関連項目
以下の表は、すべての可能な basic_ios アクセサ( good() 、 fail() など)の値を、 ios_base::iostate フラグの全組み合わせに対して示しています:
| ios_base::iostate フラグ |
basic_ios
アクセサ
|
|||||||
eofbit
|
failbit
|
badbit
|
good() | fail() | bad() | eof() | operator bool | operator! |
| false | false | false | true | false | false | false | true | false |
| 偽 | 偽 | 真 | 偽 | 真 | 真 | 偽 | 偽 | 真 |
| 偽 | 真 | 偽 | 偽 | 真 | 偽 | 偽 | 偽 | 真 |
| 偽 | 真 | 真 | 偽 | 真 | 真 | 偽 | 偽 | 真 |
| true | false | false | false | false | false | true | true | false |
| true | false | true | false | true | true | true | false | true |
| 真 | 真 | 偽 | 偽 | 真 | 偽 | 真 | 偽 | 真 |
| true | true | true | false | true | true | true | false | true |