Từ bản nháp tài liệu chuẩn C ++ 17:
30.4.3 Đối tượng luồng hẹp [hẹp.stream.objects]
istream cin;
1 Đối tượng cin
kiểm soát đầu vào từ bộ đệm luồng liên kết với đối tượng stdin
, được khai báo trong <cstdio>
(30.11.1).
2 Sau khi đối tượng cin
được khởi tạo, cin.tie()
trả về &cout
. Mặt khác, trạng thái của nó giống như yêu cầu đối với basic_ios<char>::init
(30.5.5.2).
ostream cout;
3 Đối tượng cout
điều khiển đầu ra tới bộ đệm luồng liên kết với đối tượng stdout
, được khai báo trong <cstdio>
(30.11.1).
ostream cerr;
4 Đối tượng cerr
điều khiển đầu ra tới bộ đệm luồng liên kết với đối tượng stderr
, được khai báo trong <cstdio>
(30.11.1).
5 Sau khi đối tượng cerr
được khởi tạo, cerr.flags() & unitbuf
là khác không và cerr.tie()
trả về &cout
. Mặt khác, trạng thái của nó giống như yêu cầu đối với basic_ios<char>::init
(30.5.5.2).
ostream clog;
6 Đối tượng clog
điều khiển đầu ra tới bộ đệm luồng liên kết với đối tượng stderr
, được khai báo trong <cstdio>
(30.11.1).
Thảo luận...
cout
viết cho stdout
; cerr
và clog
đểstderr
Standard Out ( stdout
) nhằm mục đích nhận đầu ra không lỗi, không chẩn đoán từ chương trình, chẳng hạn như đầu ra từ quá trình xử lý thành công có thể được hiển thị cho người dùng cuối hoặc truyền trực tiếp vào một số giai đoạn xử lý tiếp theo.
Lỗi Chuẩn ( stderr
) dành cho đầu ra chẩn đoán, chẳng hạn như cảnh báo và thông báo lỗi cho biết chương trình không hoặc có thể không tạo ra đầu ra mà người dùng có thể mong đợi. Đầu vào này có thể được hiển thị cho người dùng cuối ngay cả khi dữ liệu đầu ra được chuyển đến giai đoạn xử lý tiếp theo.
cin
và cerr
bị ràng buộc vớicout
Cả hai đều xả nước cout
trước khi tự xử lý các hoạt động I / O. Điều này đảm bảo các lời nhắc được gửi đến cout
được hiển thị trước khi chương trình chặn đọc đầu vào từ cin
đó và đầu ra trước đó tới cout
được xóa trước khi ghi lỗi cerr
, điều này giữ cho các thông báo theo thứ tự thời gian của quá trình tạo ra chúng khi cả hai đều được chuyển hướng đến cùng một thiết bị đầu cuối / tệp / Vân vân..
Điều này trái ngược với clog
- nếu bạn viết ở đó, nó sẽ không được lưu vào bộ đệm và không bị ràng buộc với bất cứ thứ gì, vì vậy nó sẽ đệm số lượng nhật ký có kích thước phù hợp trước khi xả. Điều này mang lại thông lượng tin nhắn cao nhất, nhưng có nghĩa là các tin nhắn có thể không được hiển thị nhanh chóng cho người tiêu dùng đang đọc thiết bị đầu cuối hoặc theo dõi nhật ký.
stdout
,stdin
(chocin
) và luồngstderr
đó sử dụng theo mặc định. Tôi tin rằngclog
chỉcerr
với một thay đổi đệm.