std::string, wstring, u16/32string clarification

std::string, wstring, u16/32string clarification

本文关键字:32string clarification wstring string std u16      更新时间:2023-10-16

我目前对std::stringstd::wstring的区别的理解仅仅是缓冲区的类型;分别为charwchar_t

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

然而,还有一些字符串类型,我想直接在我的脑海里:u16stringu32string,它们分别是具有2字节和4字节缓冲区的字符串。

那么,我的问题是:

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

区别在于charwchar_t的细节是实现定义的,而char16_tchar32_t的编码是由c++ 11标准显式定义的。

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