Trong C++, cout, cin, cerr, clog khác nhau như thế nào?

Cho em hỏi trong C++, lệnh 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ả :slight_smile: 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 :slight_smile: (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 :slight_smile:

  • 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
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?