std::string, wstring, u16/32string clarification
std::string, wstring, u16/32string clarification
我目前对std::string
和std::wstring
的区别的理解仅仅是缓冲区的类型;分别为char
和wchar_t
。
我也读到大多数(如果不是全部)linux发行版使用char
的任何和所有字符串,包括ASCII和UTF,其中Windows是使用wchar_t
的主要操作系统。
然而,还有一些字符串类型,我想直接在我的脑海里:u16string
和u32string
,它们分别是具有2字节和4字节缓冲区的字符串。
那么,我的问题是:
在sizeof(wchar_t) == 2
的平台上,std::wstring
是否与std::u16string
功能等同,以及sizeof(wchar_t) == 4
和std::u32string
的平台?
区别在于char
和wchar_t
的细节是实现定义的,而char16_t
和char32_t
的编码是由c++ 11标准显式定义的。
这意味着wstring
可能与u16string
或u32string
存储相同的数据,但我们不知道是哪一个。并且允许一些奇怪的实现使它们都不同,因为旧char类型的大小和编码只是没有由标准定义。