Cho em hỏi trong C++, lệnh cout, cin, cerr, clog khác nhau như thế nào ạ?
Trong C++, cout, cin, cerr, clog khác nhau như thế nào?
Đầu tiên cần nhấn mạnh là cả 4 đối tượng đều là (text) stream chứ không nằm ở đâu cả ko phải cứ
cin
là keyboard input, cứ cout
là terminal.
- cin: luồng nhập chuẩn (standard input)
- cout: luồng xuất chuẩn (standard output)
Giữa cin và cout mặc định sẽ đồng bộ với nhau để đảm bảo cout
đã ra hết trước khi cin
cho nhập (và ngược lại).Ta có thể hủy được bằng
cin.tie(nullptr);
vì batch processing thì không cần câu nhắc “nhập số” nữa
-
clog
: luồng báo lỗi chuẩn có bộ đệm -
cerr
: luồng báo lỗi không bộ đệm
Tại sao lại có bộ đệm? Vì sự kiện log không đến mức cấp thiết, nhưng ERR (lỗi) thì phải khẩn trương vì có nguy cơ sập chương trình.
Ngoài ra 4 luồng này còn đồng bộ với các luồng trong C và có thể vô hiệu hóa bằng 1 câu lệnh std::ios_base::sync_with_stdio(false);
Vậy ta có 2 câu để chạy khi đua speed.
6 Likes