QString 比 std::string 有什么优势?普通的 std::string 可以存储 unicode 字符吗?我正在尝试编写一个可以打开各种歌曲文件的程序。这些文件的名称可以是不同的语言。我听说在这种情况下使用普通字符串将无法正常工作。我想保持应用程序独立于 QT 并重用代码,例如在 android 中。你有什么建议。
4 回答
如果您使用 Qt 框架来编写您的软件,那么您最好使用 QString。原因很简单,几乎所有处理字符串的 Qt 函数都将接受 QString。如果您使用 std::string ,您最终可能会遇到必须从一个到另一个进行类型转换的情况。如果您的软件根本不使用 Qt,您应该考虑使用 std::string。这将使您的代码更具可移植性,并且不依赖于用户必须安装才能使用您的软件的额外框架。
我不熟悉QString
,但它的最大优点std::string
是它是标准的。对于 Unicode,将 UTF-8 存储在std::string
;中没有问题。但是,根据您在做什么,最好使用 a std::wstring
(通常将存储 UTF-16 或 UTF-32)。
对于 Unicode 的复杂操作,我建议使用 ICU。但是对于很多应用来说,仅仅存储 UTF-8 就足够了。
从技术上讲,有一个标准的字符串类来存储任何类型的字符:std::basic_string
. std::string
andstd::wstring
只是std::basic_string
forchar
和的特化wchar
。还有一些专门用于 UTF-16 和 UTF-32 存储std::u16string
。std::u32string
无论如何,如果你必须使用 Qt,QString
它可能总是比任何标准库字符串更好的选择,因为整个 Qt 框架都是为使用它而设计的。