當我在一個測試中使用std :: istream對象(在cplusplus.com下面的例子中,一個std :: ifstream):「if(myistreamobject)」,該對象是自動分配的在堆棧中永遠不會是空的,對吧?...在下面的例子中,我們使用相同的測試來檢查是否所有的字節都是從文件中讀取的......這真是一個奇怪的代碼,我通常在使用這種風格時我正在處理指針...測試一個istream對象
我想知道在std :: istream中使用哪種機制在測試中返回一個值,以及該值的真正含義......(最後的成功/失敗操作??)它是一個布爾轉換的重載(像MFC類CString中的const char *操作符)或者它是另一種技術?
因爲該對象永遠不會爲空,因此將其放入測試中將始終返回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://en.cppreference.com/w/cpp/io/basic_ios/operator_bool –
謝謝,我用谷歌搜索和在cplusplus.com,但我沒有找到有意義的結果。 – Aminos
您應該更好地使用鏈接的參考。 cplusplus.com因缺陷,錯誤或缺失信息而出名。 –