2016-10-28 16 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 (std::getline(infile, line)).

В отмеченной документации указано, что возвращаемое значение std::getline(std::basic_istream<CharT,Traits>& input, ...) равно input, то есть ссылку на первый аргумент.

Как можно использовать возвращаемое значение getline как условие цикла while, которое должно быть типа bool?

std::ifstream осуществить operator bool()?

+0

«* ли' зЬй :: 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' 'оператор bool()'? "? [Закрыть. Унаследованный один] (http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool) – user4581301

+1

И pre C++ 11 имел 'operator void *'. –

ответ

3

Есть ли std :: ifstream реализовать оператор bool()?

It does:

Проверки не имеет ли поток без ошибок. < ...> Возвращает true, если поток не имеет ошибок и готов для операций ввода-вывода . В частности, возвращается !fail().

Этот оператор позволяет использовать потоки и функцию, которые возвращают ссылки на потоки в условиях цикла, что приводит к Идиоматическим C++ входа петель, такие как while(stream >> value) {...} или while(getline(stream, string)){...}