Смешивание широких и узких потоков вывода в одной программе
В «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