C++ 03定義了兩種字符類型:char
和wchar_t
。 (讓我們忽略了signed char
和unsigned char
瘋狂)。爲什麼std :: u16cout缺失?
然後將這兩個字符應用於std::basic_string
,std::basic_ostream
等,如std::string/std::wstring
和std::ostream/std::wostream
。
從流的標準庫還定義全局std::cout
和std::wcout
。
新的C++ 0x標準定義了另外兩種字符類型char16_t
和char32_t
。但是,唯一新的類型定義是std::u16string
和std::u32string
。
爲什麼標準不提供std::u16ostream
?或者如何處理std::u32cout
?
你爲什麼認爲它需要它們?流只是一個字節序列。它是否使得以不同格式編寫和讀取流的可能性更小?沒有。一次可以用std :: ostream編寫一個流,然後用std :: u16stream讀取流,這些流就可以工作(所以沒有額外的保護措施來做錯誤的事情)。因此,將流讀入正確類型的對象的響應性仍然落在程序員身上,因爲沒有真正的方法來確定輸入流的類型(它只是一個字節序列)。 – 2011-05-16 16:33:45
無可否認,'std :: u32cout'不可能經常使用。我只能想象國際化應用程序的控制檯輸出。然而,一個'std :: u32ofstream'會立即有用。 – 2011-05-16 16:37:27
@deft_code:我看不出有什麼用處。你需要更詳細地解釋爲什麼你認爲這很有用。您將存儲格式硬編碼到流中,但您沒有方法檢測流是否實際上是使用該格式創建的。 – 2011-05-16 16:55:12