Mixing Wide and Narrow Character Streams: Understanding the Standard's Requirements
In C , mixing cout (narrow character output stream) and wcout (wide character output stream) in the same program raises questions about stream orientation.
The C Standard [27.4.1] dictates that "operations on corresponding wide- and narrow-character streams" should follow the same semantics as mixing operations on FILEs in the C Standard. Referring to [7.19.2] in the C Standard, it is evident that byte input/output functions should not be applied to wide-oriented streams, and wide character input/output functions should not be applied to byte-oriented streams.
This suggests that mixing wcout and cout within the same program should be avoided. However, exceptions exist. For instance, in Visual C 10.0, the fwide function responsible for maintaining stream orientation is reportedly unimplemented. This means that intermingling cout and wcout may function properly in that environment.
Similarly, a "bug" in libstdc (libstdc /11705) allows the mixing of byte-oriented and wide-oriented I/O by calling std::ios::sync_with_stdio(false). However, it is important to note that this behavior is not guaranteed and may vary depending on the compiler and operating system.
Therefore, while the standard recommends against mixing cout and wcout, it is essential to be aware of potential exceptions and to ensure proper handling of stream orientation when working with different compilers or environments.
The above is the detailed content of Can You Mix `cout` and `wcout` in C Without Breaking the Standard?. For more information, please follow other related articles on the PHP Chinese website!