2013-02-03 48 views
0

我看到允許將char寫入std::wostream(例如,std::wcout<<"looooool";)。Wide streams and char

char如何更改爲wchar(如果發生了這種情況)?

+0

http://en.cppreference.com/w/cpp/string/multibyte/mbrtowc –

+1

我沒有看到任何'std :: string's。 – chris

+0

那麼明智的做法還是不把char添加到廣泛的流中?或者我更好地添加wchar而不是每次都轉換?或者它不重要? –

回答

0

當您發送一個char或一個c字符串(char *)到一個寬的流時,單個八位字節(字節)被轉換爲wchar與widenstd::string沒有自動轉換。

您不能以這種方式將多字節UTF-8字符發送到寬字符流中,因爲字節一次只能轉換一個字符。在默認語言環境中,不會將非ASCII字符轉換爲寬字符,因此轉換將失敗,從而將寬流轉換爲錯誤狀態。

您是否利用此轉換取決於您;該標準允許它,對於字符和字符串文字,至少對我來說似乎是無害的。但請注意,發送到寬視頻流的字符串對象必須是std::wstring,而不是std::string