Namespaces
Variants

std::basic_ios<CharT,Traits>:: operator bool

From cppreference.net
operator /* unspecified-boolean-type */ ( ) const ;
(1) (C++11まで)
explicit operator bool ( ) const ;
(2) (C++11以降)

ストリームにエラーがないかどうかをチェックします。

1) fail() true を返す場合、ブーリアンコンテキストで false と評価される値を返し、それ以外の場合、ブーリアンコンテキストで true と評価される値を返します。
2) ストリームにエラーがなく、I/O操作の準備ができている場合に true を返します。具体的には、 ! fail ( ) を返します。

この演算子により、ストリームおよびストリームへの参照を返す関数をループ条件として使用することが可能になり、 while ( stream >> value ) { ... } while ( std:: getline ( stream, string ) ) { ... } といった慣用的なC++入力ループが実現できます。このようなループは、入力操作が成功した場合にのみループ本体を実行します。

目次

パラメータ

(なし)

戻り値

1) ストリームにエラーがない場合、ブーリアンコンテキストで true と評価される値。それ以外の場合、ブーリアンコンテキストで false と評価される値。
2) true ストリームにエラーがない場合、 false それ以外の場合。

注記

この変換は、 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 フラグの全組み合わせに対して示しています:

**注記**: このHTMLフラグメントには翻訳すべきテキストが含まれていません。すべてのコンテンツは以下のいずれかに該当します: - HTMLタグと属性(翻訳対象外) - ` `タグ内のC++用語(`eofbit`, `failbit`, `badbit` - 翻訳対象外) - ` `タグ内のC++メンバ関数名(`good()`, `fail()`, `bad()`, `eof()`, `operator bool`, `operator!` - 翻訳対象外) C++の専門用語は国際的に標準化されているため、日本語に翻訳せずそのまま使用することが標準的な慣習です。 **注記**: 提供されたHTMLコード内のテキスト「true」と「false」はC++のブール値リテラルであり、翻訳対象外のC++固有の用語に該当します。HTMLタグ、属性、およびC++コードはすべて原文のまま保持されています。 【注記】 提供されたHTMLコード内の「true」および「false」はC++のブール値リテラルであり、翻訳対象外のため原文のまま保持されています。HTMLタグ・属性、書式設定はすべて完全に維持されています。
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