จากเอกสารมาตรฐาน C ++ 17 แบบร่าง:
30.4.3 วัตถุสตรีมแคบ [narrow.stream.objects]
istream cin;
1 อ็อบเจ็กต์cinควบคุมอินพุตจากบัฟเฟอร์สตรีมที่เกี่ยวข้องกับอ็อบเจ็กต์stdinประกาศใน<cstdio>(30.11.1)
2 หลังจากที่วัตถุที่cinจะเริ่มต้นได้ผลตอบแทนcin.tie() &coutสถานะเป็นอย่างอื่นเหมือนกับที่กำหนดไว้สำหรับbasic_ios<char>::init(30.5.5.2)
ostream cout;
3 อ็อบเจ็กต์coutควบคุมเอาต์พุตไปยังสตรีมบัฟเฟอร์ที่เกี่ยวข้องกับอ็อบเจ็กต์stdoutประกาศใน<cstdio>(30.11.1)
ostream cerr;
4 อ็อบเจ็กต์cerrควบคุมเอาต์พุตไปยังสตรีมบัฟเฟอร์ที่เกี่ยวข้องกับอ็อบเจ็กต์stderrประกาศใน<cstdio>(30.11.1)
5 หลังจากที่วัตถุที่cerrจะเริ่มต้น, cerr.flags() & unitbufไม่ใช่ศูนย์และผลตอบแทนcerr.tie() &coutสถานะเป็นอย่างอื่นเหมือนกับที่กำหนดไว้สำหรับbasic_ios<char>::init(30.5.5.2)
ostream clog;
6 อ็อบเจ็กต์clogควบคุมเอาต์พุตไปยังสตรีมบัฟเฟอร์ที่เกี่ยวข้องกับอ็อบเจ็กต์stderrประกาศใน<cstdio>(30.11.1)
อภิปรายผล...
coutเขียนถึงstdout; cerrและclogถึงstderr
Standard Out ( stdout) มีไว้เพื่อรับเอาต์พุตที่ไม่ใช่ข้อผิดพลาดและไม่ใช่การวินิจฉัยจากโปรแกรมเช่นเอาต์พุตจากการประมวลผลที่สำเร็จซึ่งสามารถแสดงต่อผู้ใช้ปลายทางหรือสตรีมไปยังขั้นตอนการประมวลผลเพิ่มเติม
ข้อผิดพลาดมาตรฐาน ( stderr) มีไว้สำหรับเอาต์พุตการวินิจฉัยเช่นคำเตือนและข้อความแสดงข้อผิดพลาดที่ระบุว่าโปรแกรมไม่ได้หรืออาจไม่ได้สร้างเอาต์พุตที่ผู้ใช้อาจคาดหวัง อินพุตนี้อาจแสดงต่อผู้ใช้แม้ว่าข้อมูลเอาต์พุตจะถูกส่งไปยังขั้นตอนการประมวลผลเพิ่มเติม
cinและcerrเชื่อมโยงกับcout
ทั้งสองล้างcoutก่อนที่จะจัดการการดำเนินงาน I / O ด้วยตนเอง สิ่งนี้ทำให้มั่นใจได้ว่าพร้อมต์ที่ส่งถึงcoutจะมองเห็นได้ก่อนที่โปรแกรมจะบล็อกเพื่ออ่านอินพุตจากcinและเอาต์พุตก่อนหน้านี้จะcoutถูกล้างก่อนที่จะเขียนข้อผิดพลาดผ่านcerrซึ่งจะเก็บข้อความตามลำดับเวลาของการสร้างเมื่อทั้งสองถูกส่งไปยังเทอร์มินัล / ไฟล์ / เดียวกัน ฯลฯ ..
สิ่งนี้ตรงกันข้ามกับclog- ถ้าคุณเขียนที่นั่นมันจะไม่ถูกบัฟเฟอร์และไม่ผูกติดกับอะไรเลยดังนั้นมันจะบัฟเฟอร์การบันทึกในปริมาณที่เหมาะสมก่อนที่จะล้างออก สิ่งนี้ให้ปริมาณงานสูงสุดของข้อความ แต่หมายความว่าข้อความอาจไม่สามารถมองเห็นได้อย่างรวดเร็วสำหรับผู้บริโภคที่อ่านเทอร์มินัลหรือกำหนดส่วนท้ายของบันทึก
stdout,stdin(สำหรับcin) และstderrใช้โดยค่าเริ่มต้น ฉันเชื่อว่าclogเป็นเพียงcerrการเปลี่ยนแปลงบัฟเฟอร์