这两种字符串存储格式有什么区别吗?
std::wstring
是一个以 wchar_t
为元素的容器。 wchar_t
的大小没有被指定——Windows 编译器倾向于使用 16 位类型,Unix 编译器则使用 32 位类型。
UTF-16 是一种将 Unicode 码点序列编码为 16 位整数序列的方式。
如果您在 Visual Studio 中使用宽字符字面值(例如 L"Hello World"
),并且该字面值不包含 BMP 之外的字符,则会得到 UTF-16,但是这两个概念大部分情况下是无关的。如果使用 BMP 之外的字符,则即使 wchar_t
是 16 位,std::wstring
也不会为您将 代理对 转换为 Unicode 码点。
UTF-16是一种特定的Unicode编码方式。 std::wstring
是一种字符串实现,它使用 wchar_t
作为存储每个字符的基础类型。相比之下,普通的 std::string
使用 char
。
与wchar_t
一起使用的编码不一定是UTF-16,例如它也可以是UTF-32。
UTF-16 是一种用16位元素表示文本的概念,但一个实际的文本字符可能由多个元素组成。
std::wstring 只是这些元素的集合,它是一个主要关注存储的类。
wstring 中的元素 wchar_t 至少为16位,但也可能是32位。