Es scheint gut akzeptiert, dass die istream::peek
Operation blockiert.C++ istream :: peek - sollte es nicht blockierend sein?
Der Standard, obwohl wohl etwas mehrdeutig, neigt zu nicht blockierendem Verhalten. peek
Anrufe sgetc
wiederum dessen Verhalten.
„Das Zeichen an der gegenwärtigen Position der gesteuerten Eingangssequenz, als ein Wert des Typ int Wenn es keine weiteren Zeichen sind von der gesteuerten Eingangssequenz zu lesen, Die Funktion gibt den Dateiendewert (EOF) zurück. "
Es heißt nicht: „Wenn es keine weiteren Zeichen sind ....... warten, bis es“
Fehle ich etwas hier? Oder sind die peek
Implementierungen, die wir verwenden, nur irgendwie falsch?
Der von Ihnen zitierte Text ist nicht Teil des C++ Standards –
Zitat von http://www.cplusplus.com/reference/streambuf/streambuf/sgetc/. Eine ähnliche Dokumentation finden Sie unter http://www.cplusplus.com/reference/streambuf/basic_streambuf/sgetc/ sowie unter http://en.cppreference.com/w/cpp/io/basic_streambuf/underflow. Sagst du, dass diese ungenau sind? – Malachi
cpluscplus.com ist eine Mistseite. Der von Ihnen angegebene cppreference-Link enthält den Text in Ihrer Frage nicht. In der Tat heißt es "Stellt sicher, dass mindestens ein Zeichen im Eingabebereich verfügbar ist, indem [...] Lesen von mehr Daten in der Eingabesequenz (falls anwendbar). "Was in diesem Fall anwendbar ist, und" Lesen von Daten aus der Eingabesequenz "beinhaltet das Warten auf mehr Daten, wenn keine vorhanden ist und der Datenstrom nicht in einem EOF oder anderen ist Fehlerzustand –