Bir akıştaki tüm verileri okuduğumda ancak sonunu okumayı denemediğimde, akımın EOF'si ayarlanmamış. C++ akışları böyle çalışır, değil mi? Bunu ignore()
verileri ing eğer yerine read()
, EOF ayarlanır,Neden std :: ios_base :: ignore() EOF bitini ayarlıyor?
#include <sstream>
#include <cassert>
char buf[255];
int main()
{
std::stringstream ss("abcdef");
ss.read(buf, 6);
assert(!ss.eof());
assert(ss.tellg() == 6);
}
Ancak: Bu işler sebebidir
#include <sstream>
#include <cassert>
int main()
{
std::stringstream ss("abcdef");
ss.ignore(6);
assert(!ss.eof()); // <-- FAILS
assert(ss.tellg() == 6); // <-- FAILS
}
Bu GCC 4.8 ve GCC gövde (Coliru) üzerindedir.
ne yapıyorum için can sıkıcı olduğu (yani tellg()
böyle yapıyor çünkü) Ayrıca tellg()
dönüşü -1
yapma talihsiz yan etkisi yoktur.
Bu standart yetkili mi? Eğer öyleyse, hangi pasaj ve neden? ignore()
neden anlattığımdan daha fazla okumaya çalışır?
Bu davranış için herhangi bir neden bulamıyorum cppreference's ignore()
page. Muhtemelen .seekg(6, std::ios::cur)
olabilir, değil mi? Ama hala neler olduğunu bilmek isterim.
Vay, bu MSVS çalışır dönmek yok değil. Ayrıca Coliru'da clang ile başarısız oldu. Derleyici kendisi değil, kütüphane olabileceğini düşünüyorum. – NathanOliver
eof' dışında başka bir 'sınır' belirtirseniz ne olur? – dwcanillas
@dwcanillas: [Değişiklik yok] (http://coliru.stacked-crooked.com/a/bdb33a4a1a87e593). –