0
를 재설정 : seekg 제로는 GCC 4.6.2 <code>istream.tcc</code>에 따르면 EOF 플래그
basic_istream<_CharT, _Traits>::
seekg(off_type __off, ios_base::seekdir __dir)
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR60. Do not change _M_gcount.
// Clear eofbit per N3168.
this->clear(this->rdstate() & ~ios_base::eofbit);
가 실수로이 충돌 - 나는 무한
while (!eof)
루프를 얻는 이유를 알아낼 수 없었다. 기본적으로 seekg가 0 길이로 호출 될 때 - 당신은 여전히 eof reset을 얻습니다.
std::ios_base_::cur
길이가 0 인 경우에도 eof 비트를 재설정해야 할 이유가 있습니까? 이것은 VC10/11에서 발생하지 않습니다.
N3168이란 무엇입니까?
N3168의 동기는 정상적으로,'eofbit'이 설정되면, 모든 추가 작업이 실패 할 것이 요구됩니다. 즉, 파일의 끝까지 읽으면,'eof'를 지우지 않고 이전의 지점으로 되돌아 갈 수 없다는 것을 의미합니다. "수정"은 찾기 기능이 다른 것을 시도하기 전에'eofbit '을 재설정하도록 요구하는 것입니다. 물론, 입력이 실패한 경우, 탐색하기 전에 여전히이 문제를 해결해야합니다. 따라서이 문제는 매우 희귀합니다 (파일 끝에있는 정수를 입력하고 후행 공백없이 검색 한 후). –
그러나'ios_base :: cur'에서'0' 오프셋을 가진 seekg-ing은 이론상 효과가 없습니다. 또는 seekg가 호출 된 후에는 'pos'값에 관계없이 항상 진행되는 또 다른 이유가 있습니다. – Nick
현재 위치를 탐색하는 주요 용도는 스트림을 읽기 또는 쓰기 용으로 변경할 수있는 상태로 변경하는 것입니다. 또한 탐색은 위치를 변경하기위한 것이므로 스트림이 끝이 아닐 수도 있다고 가정하는 것이 합리적입니다. 필자는 그 논문을 보지 않았지만,'failbit'을 잠재적으로 삭제하는 변경을 포함하고 있습니다. 대부분의 작업이 실패 할 때까지 설정되어있는 한. –