Когда я использую объект std :: istream (в примере ниже из cplusplus.com, std :: ifstream) в тесте: «if (myistreamobject)», объект, который автоматически выделяется в стек никогда не является нулевым, верно? ... в приведенном ниже примере мы используем тот же тест, чтобы проверить, были ли все байты прочитаны из файла ... и это действительно странный код, я обычно использую этот стиль, когда Я имею дело с указателями ...тестирование объекта istream
Я хочу знать, какой механизм используется в std :: istream, чтобы вернуть значение в тестах и что это значение действительно означает ... (успех/сбой последнего операция?) является ли это перегрузкой bool cast (например, оператор const char *, приводимый в MFC-классе CString), или это другой метод?
Потому что объект никогда не имеет значения null, поэтому сдавать его в тест всегда будет возвращать true.
// read a file into memory
#include <iostream> // std::cout
#include <fstream> // std::ifstream
int main() {
std::ifstream is ("test.txt", std::ifstream::binary);
if (is) {
// get length of file:
is.seekg (0, is.end);
int length = is.tellg();
is.seekg (0, is.beg);
char * buffer = new char [length];
std::cout << "Reading " << length << " characters... ";
// read data as a block:
is.read (buffer,length);
if (is) // <== this is really odd
std::cout << "all characters read successfully.";
else
std::cout << "error: only " << is.gcount() << " could be read";
is.close();
// ...buffer contains the entire file...
delete[] buffer;
}
return 0;
}
Прочтите здесь, пожалуйста: http://ru.cppreference.com/w/cpp/io/basic_ios/operator_bool –
Спасибо, я искал в google и на cplusplus.com, но я не нашел значимых результатов. – Aminos
Вам лучше использовать ссылку, связанную мной. cplusplus.com известен недостатками и неправильной или отсутствующей информацией. –