«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему следует избегать смешивания cout и wcout в одной программе на C++?

Почему следует избегать смешивания cout и wcout в одной программе на C++?

Опубликовано 23 декабря 2024 г.
Просматривать:440

Why Should You Avoid Mixing cout and wcout in the Same C   Program?

Смешивание широких и узких потоков вывода в одной программе

В «C Cookbook» упоминается, что смешивание cout и wcout в ту же программу делать не следует. Этот комментарий связан с тем фактом, что стандарты C и C требуют, чтобы потоки имели ориентацию, и как только эта ориентация установлена ​​для потока, вы не должны смешивать операции, несовместимые с ориентацией.

Что означает ли это на практике?

Когда cout или wcout вызывается в первый раз, ориентация для стандартного вывода устанавливается. В случае cout stdout становится потоком с байтовой ориентацией, а в случае wcout stdout становится потоком с широкой ориентацией. Согласно стандарту C [27.4.1] и стандарту C [7.19.2], как только ориентация потока установлена, вы не должны вызывать функцию, которая несовместима с ориентацией этого потока.

Исключения из правил

Однако важно отметить, что не все компиляторы строго следуют этому стандарту. Например, в Visual C 10.0 функция fwide (используемая для установки ориентации потока) не реализована. Поэтому в Visual C разрешено смешивание cout и wcout.

Аналогично, в ранних версиях GCC из-за исправленной ошибки можно было вызывать cout и wcout в одной программе, вызывая std ::ios::sync_with_stdio (ложь); в начале программы.

Однако важно иметь в виду, что это исключения из правил. В общем, не рекомендуется смешивать широкие и узкие потоки вывода в одной программе, так как это может привести к неожиданному поведению или неопределенным результатам.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3