Standart hakkında bu konuda okuma hatırladım, işte gidiyor:
Standart akışların nasıl davrandığını tanımlayan C11 standardına bakın, C ++ programları CRT ile arayüz oluşturduğundan, C11 standardı buradaki yıkama politikasını yönetmelidir.
ISO / IEC 9899: 201x
7.21.3 §7
Program başlangıcında, üç metin akışı önceden tanımlanmıştır ve açıkça açılmasına gerek yoktur - standart girdi (geleneksel girdiyi okumak için), standart çıktı (geleneksel çıktı yazmak için) ve standart hata (tanı çıktısını yazmak için). Başlangıçta standart hata akışı tam olarak arabelleğe alınmaz; standart giriş ve standart çıkış akışları, yalnızca akışın etkileşimli bir cihaza atıfta bulunmayacağı belirlenebiliyorsa tamamen arabelleğe alınır.
7.21.3 §3
Bir akış arabelleğe alınmadığında, karakterlerin kaynaktan veya hedeften en kısa zamanda görünmesi amaçlanır. Aksi takdirde karakterler birikebilir ve ana bilgisayar ortamına / ortamından bir blok olarak iletilebilir. Bir akış tamamen arabelleğe alındığında, karakterlerin bir arabellek doldurulduğunda bir ana bilgisayar ortamına veya bloktan iletilmesi amaçlanır. Bir akış satır arabelleğe alındığında, karakterlerin yeni satır karakteri ile karşılaşıldığında ana bilgisayar ortamına veya ana ortamdan bir blok olarak iletilmesi amaçlanır. Ayrıca, karakterlerin bir arabellek dolduğunda, arabelleksiz bir akışta giriş istendiğinde veya ana bilgisayar ortamından karakterlerin iletilmesini gerektiren bir satır arabellek akışında giriş istendiğinde ana bilgisayar ortamına bir blok olarak iletilmesi amaçlanır. .
Bu araçlar std::cout
ve std::cin
tam tamponlanır ancak ve ancak bunlar olmayan bir etkileşimli cihaz kastediyoruz. Başka bir deyişle, stdout bir terminale bağlanırsa, davranışta bir fark yoktur.
Ancak, std::cout.sync_with_stdio(false)
çağrılırsa, '\n'
etkileşimli cihazlarda bile sifona neden olmaz. Aksi takdirde '\n'
, std::endl
dosyalara piping yapılmadığı sürece eşdeğerdir : c ++ ref on std :: endl .