std :: string,wstring,u16 / 32string澄清

时间:2013-01-21 11:59:26

标签: c++ string unicode std

我目前对std::stringstd::wstring之间差异的理解只是缓冲区的类型;即分别为char vs wchar_t

我还读到大多数(如果不是全部)linux发行版使用char表示任何和所有字符串,包括ASCII和UTF,其中Windows是使用wchar_t的主要操作系统

但是,还有一些我希望直接在我脑海中的字符串类型:u16stringu32string,它们分别是具有2字节和4字节缓冲区的字符串。 / p>

所以,我的问题是:

sizeof(wchar_t) == 2的平台上,std::wstring功能上等同于std::u16string,以及sizeof(wchar_t) == 4std::u32string的平台?

1 个答案:

答案 0 :(得分:17)

区别在于charwchar_t的详细信息是实现定义的,而char16_tchar32_t的编码是由C ++ 11标准明确定义的

这意味着wstring 可能存储与u16stringu32string相同的数据,但我们不知道哪一个。并且允许一些奇怪的实现使它们全部不同,因为旧的char类型的大小和编码不是由标准定义的。