28

QString 比 std::string 有什么优势?普通的 std::string 可以存储 unicode 字符吗?我正在尝试编写一个可以打开各种歌曲文件的程序。这些文件的名称可以是不同的语言。我听说在这种情况下使用普通字符串将无法正常工作。我想保持应用程序独立于 QT 并重用代码,例如在 android 中。你有什么建议。

4

4 回答 4

36

QString允许您使用 Unicode,有更多有用的方法并与 Qt 很好地集成。正如cbamber85 所 指出的,它还具有更好的性能。

std::string只是存储你给它的字节,它对编码一无所知。它每个字符使用一个字节,但对于世界上所有的语言来说这还不够。存储文本的最佳方式可能是 UTF-8 编码,其中字符可以占用不同数量的字节,并且std::string无法正确处理!例如,这意味着该length方法将返回字节数,而不是字符。而这只是冰山一角……

于 2012-06-14T07:58:58.420 回答
10

如果您使用 Qt 框架来编写您的软件,那么您最好使用 QString。原因很简单,几乎所有处理字符串的 Qt 函数都将接受 QString。如果您使用 std::string ,您最终可能会遇到必须从一个到另一个进行类型转换的情况。如果您的软件根本不使用 Qt,您应该考虑使用 std::string。这将使您的代码更具可移植性,并且不依赖于用户必须安装才能使用您的软件的额外框架。

于 2012-06-14T10:48:41.603 回答
8

我不熟悉QString,但它的最大优点std::string 是它标准的。对于 Unicode,将 UTF-8 存储在std::string;中没有问题。但是,根据您在做什么,最好使用 a std::wstring(通常将存储 UTF-16 或 UTF-32)。

对于 Unicode 的复杂操作,我建议使用 ICU。但是对于很多应用来说,仅仅存储 UTF-8 就足够了。

于 2012-06-14T08:06:08.513 回答
3

从技术上讲,有一个标准的字符串类来存储任何类型的字符:std::basic_string. std::stringandstd::wstring只是std::basic_stringforchar和的特化wchar。还有一些专门用于 UTF-16 和 UTF-32 存储std::u16stringstd::u32string

无论如何,如果你必须使用 Qt,QString它可能总是比任何标准库字符串更好的选择,因为整个 Qt 框架都是为使用它而设计的。

于 2012-06-14T08:20:05.577 回答