檢查迴圈條件內的檔案結尾是不好的做法

eof讀取檔案結尾後才返回 true 。它並不表示下一次讀取將是流的結束。

while (!f.eof())
{
  // Everything is OK

  f >> buffer;

  // What if *only* now the eof / fail bit is set?

  /* Use `buffer` */
}

你可以正確地寫:

while (!f.eof()) 
{  
  f >> buffer >> std::ws;

  if (f.fail())
    break;

  /* Use `buffer` */
}

while (f >> buffer)
{
  /* Use `buffer` */
}

更簡單,更不容易出錯。

進一步參考: