的std :: string,wstring的,U16 / 32string澄清(std::stri

2019-07-18 12:03发布

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

我也看到,大部分(如果不是全部)的Linux发行版使用char的任何和所有的字符串,这两个ASCII和UTF,其中Windows是使用主OS wchar_t了。

不过,也有,我想直接在我的头上多了一些字符串类型: u16stringu32string ,分别为2个字节和4个字节的缓冲区字符串。

所以,我的问题是这样的:

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

Answer 1:

不同的是,细节charwchar_t是实现定义的,而编码char16_tchar32_t明确由C ++ 11标准中定义。

这意味着, wstring可能存储相同的数据,无论是u16stringu32string ,但我们不知道哪一个。 而且允许一些奇怪的实施,使它们各不相同,如尺寸和老焦类型的编码只是不是由标准定义。



文章来源: std::string, wstring, u16/32string clarification