2016-10-28 37 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::ifstream實施了operator bool()

+0

「*是否'的std :: ifstream'實現一個'operator 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'是否實現了'operator bool()'?」 [關。繼承一個](http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool) – user4581301

+1

而前C++ 11它有'運營商無效*'。 –

回答

3

std :: ifstream是否實現了一個運算符bool()?

It does:

檢查流是否有任何錯誤。 < ...>如果數據流沒有錯誤並且已準備好進行 I/O操作,則返回true。具體而言,返回!fail()

這個操作符使得能夠使用流和函數 返回引用到流作爲循環的條件下,從而導致 慣用C++輸入迴路如while(stream >> value) {...}while(getline(stream, string)){...}