Tôi đã đọc "C++ Cookbook" trong đó có đoạn như sau:Trộn cout và wcout trong cùng một chương trình
// cout << s << std::endl; // You shouldn't be able to
wcout << ws << std::endl; // run these at the same time
Nếu bạn quan tâm đến nhìn thấy những ví dụ thực tế, đây là a link to the page on Google books.
Ngoài ra, tôi thấy điều này SO question có vẻ như là trạng thái trộn wcout và cout là không sao. Ai đó có thể giải thích cho tôi những gì bình luận này đang nói về?
EDIT
Từ C++ chuẩn [27.4.1]:
Trộn hoạt động trên tương ứng wide- và hẹp ký tự suối theo ngữ nghĩa giống như trộn các hoạt động đó trên các tập tin, theo quy định trong Sửa đổi 1 của tiêu chuẩn ISO C.
Từ C Tiêu chuẩn [7.19.2]:
Mỗi dòng có một định hướng. Sau khi một luồng được liên kết với một tệp bên ngoài, nhưng trước khi bất kỳ hoạt động nào được thực hiện trên luồng đó, luồng không có định hướng. Khi chức năng đầu vào/đầu ra của ký tự rộng được áp dụng cho luồng không có hướng, luồng sẽ trở thành luồng có định hướng rộng. Tương tự, khi hàm đầu vào/đầu ra byte có được áp dụng cho luồng không có hướng, luồng sẽ trở thành luồng định hướng byte. Chỉ có một cuộc gọi đến chức năng freopen hoặc chức năng fwide có thể thay đổi hướng của một luồng. (Gọi thành công tới freopen sẽ xóa bất kỳ hướng nào.)
Chức năng đầu vào/đầu ra không được áp dụng cho luồng định hướng rộng và chức năng đầu vào/đầu ra ký tự rộng không được áp dụng cho luồng định hướng byte.
Vì vậy, tiêu chuẩn dường như nói rằng bạn không nên trộn chúng. Tuy nhiên, tôi đã tìm thấy báo giá này from this article:
Đối với Visual C++ 10.0, chức năng fwide được ghi nhận là chưa được thực hiện. Và từ một quan điểm thực tế, ít nhất là ở mức xuất ra toàn bộ dòng nó dường như hoạt động tốt để xen kẽ việc sử dụng cout và wcout. Vì vậy, vui vẻ, Visual C++ dường như chỉ bỏ qua các yêu cầu của tiêu chuẩn và không duy trì định hướng luồng C FILE rõ ràng không thực tế.
Và cũng có thể, liên quan đến gcc tôi thấy câu nói này từ here:
Đây là một (mới) tính năng, không phải là một lỗi, xin xem libstdC++/11.705 và tìm kiếm chung về hướng suối trong Tiêu chuẩn C (C99, 7.19.2). Tóm lại, bạn không thể kết hợp các định dạng I/O được định hướng theo chiều rộng và byte. Hiện tại, do lỗi được chỉ ra trong libstdC++/11705, bạn có thể đạt được điều gì đó gần với mong đợi của mình bằng cách gọi std :: ios :: sync_with_stdio (false); ở đầu chương trình của bạn.
Tôi thực sự đã kiểm tra trang errata của cuốn sách vì tôi nghĩ rằng đó có thể là một sai lầm, nhưng không thể tìm thấy bất cứ điều gì. –
@Jesse: Thời gian để liên lạc với tác giả, có lẽ. –
Bạn có thể giải thích ý của bạn và những gì thực sự xảy ra: "Cả hai đều bản đồ thành STDOUT"? , Cảm ơn –