1

以下有什么区别吗?

auto s1 = L"你好";
auto s2 = u8"你好";

s1s2指的是同一类型吗?
如果不是,有什么区别?首选哪一个?

4

3 回答 3

4

L""创建一个以 null 结尾的字符串,类型为const wchar_t[]. 这在 C++03 中有效。(请注意,它wchar_t指的是依赖于实现的“宽字符”类型)。

u8""创建一个以 null 结尾的 UTF-8 字符串,类型为const char[]. 这仅在 C++11 中有效。

您选择哪一个在很大程度上取决于您的需求。L""在 C++03 中工作,因此如果您需要使用较旧的代码(可能需要使用 C++03 编译器编译),您将需要使用它。u8""在许多情况下更容易使用,特别是当相关系统通常需要char *字符串时。

于 2013-08-20T01:23:59.807 回答
4
于 2013-08-20T01:26:57.970 回答
3

第一个是宽字符串,它可能被编码为 UTF-16 或 UTF-32,或者完全是其他的东西(尽管 Unicode 现在很常见,完全不同的编码不太可能)。

第二种是使用 UTF-8 编码的窄字符字符串。

至于哪个是首选:这取决于您在做什么,您正在编码的平台等。如果您主要处理已经编码为 UTF-8 的网页/URL 之类的东西,并且您可能只是将其读入,可能会验证其内容,然后将其回显,也将其存储为 UTF-8 也很有意义。

宽字符串因平台而异。例如,如果您正在为 Windows 编写代码,并且许多代码直接与操作系统(使用 UTF-16)交互,那么将字符串存储为 UTF-16 会很有意义(这就是Microsoft 的编译器用于宽字符串)。

于 2013-08-20T01:26:43.823 回答