Ниже привожу много где мною виденный способ чтентя текстового файла:
std::ifstream f("f:\\temp\\test.txt");
if (!f.is_open() || f.fail())
return false;
std::string s;
while (std::getline (f, s))
std::cout << s << "\n";
Код вполне работает, но меня смущает выделенный фрагмент.
По документации std::getline возвращает basic_istream&.
Я вот не пойму как можно ссылку на объект проверять на неноль в цикле while().
Это же не указатель, да и переопределенного оператора вроде operator bool у basic_istream тоже нету.
Никак не пойму.
Здравствуйте, Посторонним В., Вы писали:
ПВ>Ниже привожу много где мною виденный способ чтентя текстового файла:
ПВ>ПВ>std::ifstream f("f:\\temp\\test.txt");
ПВ>if (!f.is_open() || f.fail())
ПВ> return false;
ПВ>std::string s;
ПВ>while (std::getline (f, s))
ПВ> std::cout << s << "\n";
ПВ>
ПВ>Код вполне работает, но меня смущает выделенный фрагмент.
ПВ>По документации std::getline возвращает basic_istream&.
ПВ>Я вот не пойму как можно ссылку на объект проверять на неноль в цикле while().
ПВ>Это же не указатель, да и переопределенного оператора вроде operator bool у basic_istream тоже нету.
ПВ>Никак не пойму.
В basic_ios определен operator void*()
Здравствуйте, Посторонним В., Вы писали:
ПВ>Это же не указатель, да и переопределенного оператора вроде operator bool у basic_istream тоже нету.
Зато у basic_ios есть operator void*()
Смотри писание 27.4.4.3 и 27.6.1.1
... << RSDN@Home 1.2.0 alpha rev. 673>>
Здравствуйте, Посторонним В., Вы писали:
ПВ>Код вполне работает, но меня смущает выделенный фрагмент.
ПВ>По документации std::getline возвращает basic_istream&.
ПВ>Я вот не пойму как можно ссылку на объект проверять на неноль в цикле while().
ПВ>Это же не указатель, да и переопределенного оператора вроде operator bool у basic_istream тоже нету.
ПВ>Никак не пойму.
Посмотрел в STLport — у basic_istream есть оператор bool. Также у базового класса (ios_base) есть оператор void* (), что тоже может быть причиной корректного приведения к NULL.