2016-10-28 3 views
1

私はstd::getline(...)処女だとcppreference.comのドキュメントと例を参考にした、私はこのようなサンプルコードで混乱しています:std :: getline()はboolとどのように等しくなりますか?

#include <sstream> 
#include <string> 

int main(int argc, char* argv[]) 
{ 
    std::string line; 
    std::ifstream infile("sample.txt"); 

    while (std::getline(infile, line)) 
    { 
     // Do stuff 
    } 

    return 0; 
} 

...特にwhile文:while (std::getline(infile, line))

上記のドキュメントでは、戻り値がstd::getline(std::basic_istream<CharT,Traits>& input, ...)であることが、inputであることを示しています。つまり、最初の引数を参照しています。

返り値getlineをwhileループの条件として使用するにはどうすればいいですか。タイプはboolである必要がありますか?

std::ifstreamoperator bool()を実装していますか?

+0

としてループ::もしifstreamが '演算子bool()'?* *を実装しているのであれば(http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool)、あなたはそれを調べることができます同じウェブサイト](http://en.cppreference.com/w/cpp/io/basic_ifstream)。 – Biffen

+0

"' std :: ifstream'は '演算子bool()'を実装していますか? " [閉じる。継承されたone](http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool) – user4581301

+1

そしてpre C++ 11には 'operator void *'がありました。 –

答えて

3

std :: ifstreamは演算子bool()を実装していますか?ストリームにエラーがないかどうか

It does:

チェックします。 < ...>ストリームにエラーがなく、 I/O操作の準備ができている場合はtrueを返します。具体的には、!fail()を返します。

この演算子は、ループ条件としてストリームへの参照を返す ストリームと機能を使用することが可能となり、 慣用C++入力をもたらすこと `STDをい*」は、while(stream >> value) {...}又は while(getline(stream, string)){...}

関連する問題