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

Qix*_*Qix 9 c++ string unicode std

我的电流之间的差异的理解std::stringstd::wstring仅仅是该缓冲区的类型; 即,charVS wchar_t,分别.

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

但是,还有一些我希望在脑中直接得到的字符串类型:u16string并且u32string,它们分别是具有2字节和4字节缓冲区的字符串.

所以,我的问题是:

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

Bo *_*son 17

不同之处在于定义的细节charwchar_t实现,而C++ 11标准的编码char16_tchar32_t明确定义.

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