我目前对std::string
和std::wstring
之间差异的理解只是缓冲区的类型;即分别为char
vs wchar_t
。
我还读到大多数(如果不是全部)linux发行版使用char
表示任何和所有字符串,包括ASCII和UTF,其中Windows是使用wchar_t
的主要操作系统
但是,还有一些我希望直接在我脑海中的字符串类型:u16string
和u32string
,它们分别是具有2字节和4字节缓冲区的字符串。 / p>
所以,我的问题是:
在sizeof(wchar_t) == 2
的平台上,std::wstring
功能上等同于std::u16string
,以及sizeof(wchar_t) == 4
和std::u32string
的平台?
答案 0 :(得分:17)
区别在于char
和wchar_t
的详细信息是实现定义的,而char16_t
和char32_t
的编码是由C ++ 11标准明确定义的
这意味着wstring
可能存储与u16string
或u32string
相同的数据,但我们不知道哪一个。并且允许一些奇怪的实现使它们全部不同,因为旧的char类型的大小和编码不是由标准定义的。