13

std::string我目前对和之间区别的理解std::wstring仅仅是缓冲区的类型;即,charvs wchar_t,分别。

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

但是,我还想直接了解更多字符串类型:u16stringu32string,它们分别是具有 2 字节和 4 字节缓冲区的字符串。

所以,我的问题是:

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

4

1 回答 1

20

不同之处在于charand的细节是实现定义的,而andwchar_t的编码是由 C++11 标准明确定义的。char16_tchar32_t

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

于 2013-01-21T12:32:19.863 回答