Я читал "Поваренную книгу C++", в которой был следующий фрагмент:
// cout << s << std::endl; // You shouldn't be able to
wcout << ws << std::endl; // run these at the same time
Если вам интересно посмотреть реальный пример, вот ссылка на страницу в книгах Google.
Кроме того, я нашел этот ТАК вопрос, в котором, похоже, говорится, что смешивать wcout и cout можно. Может ли кто-нибудь объяснить мне, о чем идет речь в этом комментарии?
EDIT
Из C++ стандарта [27.4.1]:
Операции микширования в соответствующих wide- и узкополосных потоках следуют той же семантике, что и операции микширования в файлах FILE, как указано в поправке 1 к стандарту ISO C.
Из стандарта C [7.19.2]:
Каждый поток имеет ориентацию. После того, как поток связан с внешним файлом, но перед выполнением каких-либо операций над ним поток не имеет ориентации. Однажды широкий функция ввода/вывода символов была применена к потоку без ориентации, поток становится ориентированным потоком wide-. Аналогично, когда байтовая функция ввода/вывода имеет Применительно к потоку без ориентации поток становится байтово-ориентированным потоком. В противном случае только вызов функции freopen или функции fwide может изменить ориентация потока. (Успешный вызов freopen удаляет любую ориентацию.)
Байтовые функции ввода/вывода не должны применяться к ориентированному потоку wide- и широкому символьные функции ввода/вывода не должны применяться к байтовому потоку.
Таким образом, стандарт, кажется, говорит, что вы не должны смешивать их. Однако я нашел эту цитату из этой статьи:
Для Visual C++ 10.0 функция fwide задокументирована как невыполненная. И с практической точки зрения, по крайней мере на уровне вывода целых строк, он, очевидно, прекрасно работает, чтобы смешать использование cout и wcout. Поэтому, к счастью, Visual C++, очевидно, просто игнорирует требования стандартов и не поддерживает непрактичную явную ориентацию потока C FILE.
А также, что касается GCC, я нашел эту цитату из здесь:
Это (новая) функция, а не ошибка, см. Libstd C++/11705 и в общем поиске об ориентации потока в стандарте C (C99, 7.19.2). В двух словах ты не может смешивать байтово-ориентированный и широко-ориентированный ввод-вывод. На данный момент, из-за ошибки Как указано в libstd C++/11705, вы можете получить что-то близкое к вашему ожидания путем вызова std::ios :: sync_with_stdio (false); в начале ваша программа.