Широкие потоки и символ

Я вижу, что разрешено писать char к std::wostream (например, std::wcout<<"looooool";).

Как char изменился на wchar (если это то, что происходит)?

1

Решение

Когда вы отправляете char или c-строка (char *) к широкому потоку «отдельные октеты (байты) преобразуются в wchar с widen. Там нет автоматического преобразования из std::string,

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

Пользуетесь ли вы этим обращением или нет, зависит от вас; стандарт допускает это, и для символьных и строковых литералов, по крайней мере, он кажется мне безвредным. Но имейте в виду, что строковые объекты, которые вы отправляете в широкий поток, должны быть std::wstringне std::string,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]